SqlAlchemy 2.0 中文文档(三十六)(3)https://developer.aliyun.com/article/1562663
选定的“已知”函数
这些是一组常见 SQL 函数的GenericFunction
实现,为每个函数自动设置了预期的返回类型。它们以与func
命名空间的任何其他成员相同的方式调用:
select(func.count("*")).select_from(some_table)
请注意,任何func
未知的名称都会按原样生成函数名称 - SQLAlchemy 对可以调用的 SQL 函数没有限制,不管对 SQLAlchemy 已知还是未知,内置还是用户定义。本节仅描述 SQLAlchemy 已知参数和返回类型的函数。
对象名称 | 描述 |
aggregate_strings | 实现一个通用的字符串聚合函数。 |
array_agg | 对 ARRAY_AGG 函数的支持。 |
char_length | CHAR_LENGTH() SQL 函数。 |
coalesce | |
concat | SQL CONCAT()函数,用于连接字符串。 |
count | ANSI COUNT 聚合函数。没有参数时,发出 COUNT *。 |
cube | 实现CUBE 分组操作。 |
cume_dist | 实现cume_dist 假设集合聚合函数。 |
current_date | CURRENT_DATE() SQL 函数。 |
current_time | CURRENT_TIME() SQL 函数。 |
current_timestamp | CURRENT_TIMESTAMP() SQL 函数。 |
current_user | CURRENT_USER() SQL 函数。 |
dense_rank | 实现dense_rank 假设集合聚合函数。 |
grouping_sets | 实现GROUPING SETS 分组操作。 |
localtime | localtime() SQL 函数。 |
localtimestamp | localtimestamp() SQL 函数。 |
max | SQL MAX()聚合函数。 |
min | SQL MIN()聚合函数。 |
mode | 实现mode 有序集合聚合函数。 |
next_value | 代表“下一个值”,给定一个Sequence 作为其唯一参数。 |
now | SQL now()日期时间函数。 |
percent_rank | 实现percent_rank 假设集合聚合函数。 |
percentile_cont | 实现percentile_cont 有序集合聚合函数。 |
percentile_disc | 实现percentile_disc 有序集合聚合函数。 |
random | RANDOM() SQL 函数。 |
rank | 实现rank 假设集合聚合函数。 |
rollup | 实现ROLLUP 分组操作。 |
session_user | SESSION_USER() SQL 函数。 |
sum | SQL SUM()聚合函数。 |
sysdate | SYSDATE() SQL 函数。 |
user | USER() SQL 函数。 |
class sqlalchemy.sql.functions.aggregate_strings
实现一个通用的字符串聚合函数。
此函数将非空值连接成字符串,并用分隔符分隔值。
此函数根据每个后端编译为group_concat()
、string_agg()
或LISTAGG()
等函数。
例如,使用分隔符‘.’的示例用法:
stmt = select(func.aggregate_strings(table.c.str_col, "."))
此函数的返回类型是String
。
类签名
类sqlalchemy.sql.functions.aggregate_strings
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.array_agg
支持 ARRAY_AGG 函数。
func.array_agg(expr)
构造返回类型为ARRAY
的表达式。
例如:
stmt = select(func.array_agg(table.c.values)[2:5])
参见
array_agg()
- 返回ARRAY
的 PostgreSQL 特定版本,其中添加了 PG 特定的运算符。
类签名
类sqlalchemy.sql.functions.array_agg
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.char_length
CHAR_LENGTH() SQL 函数。
类签名
类sqlalchemy.sql.functions.char_length
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.coalesce
类签名
类sqlalchemy.sql.functions.coalesce
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
class sqlalchemy.sql.functions.concat
SQL CONCAT()函数,用于连接字符串。
例如:
>>> print(select(func.concat('a', 'b'))) SELECT concat(:concat_2, :concat_3) AS concat_1
在 SQLAlchemy 中,字符串连接更常见地使用 Python 的+
运算符与字符串数据类型一起使用,这将呈现特定于后端的连接运算符,例如:
>>> print(select(literal("a") + "b")) SELECT :param_1 || :param_2 AS anon_1
类签名
类sqlalchemy.sql.functions.concat
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.count
ANSI COUNT 聚合函数。没有参数时,发出 COUNT *。
例如:
from sqlalchemy import func from sqlalchemy import select from sqlalchemy import table, column my_table = table('some_table', column('id')) stmt = select(func.count()).select_from(my_table)
执行stmt
将发出:
SELECT count(*) AS count_1 FROM some_table
类签名
类sqlalchemy.sql.functions.count
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.cube
实现CUBE
分组操作。
此函数用作语句的 GROUP BY 的一部分,例如Select.group_by()
:
stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.cube(table.c.col_1, table.c.col_2))
新增于版本 1.2。
类签名
类sqlalchemy.sql.functions.cube
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.cume_dist
实现cume_dist
假设集聚合函数。
此函数必须与FunctionElement.within_group()
修饰符一起使用,以提供要操作的排序表达式。
此函数的返回类型为Numeric
。
类签名
类sqlalchemy.sql.functions.cume_dist
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.current_date
CURRENT_DATE()
SQL 函数。
类签名
类sqlalchemy.sql.functions.current_date
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.current_time
CURRENT_TIME()
SQL 函数。
类签名
类sqlalchemy.sql.functions.current_time
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.current_timestamp
CURRENT_TIMESTAMP()
SQL 函数。
类签名
类sqlalchemy.sql.functions.current_timestamp
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.current_user
CURRENT_USER()
SQL 函数。
类签名
类sqlalchemy.sql.functions.current_user
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.dense_rank
实现dense_rank
假设集聚合函数。
此函数必须与FunctionElement.within_group()
修饰符一起使用,以提供要操作的排序表达式。
此函数的返回类型为Integer
。
类签名
类 sqlalchemy.sql.functions.dense_rank
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.grouping_sets
实现 GROUPING SETS
分组操作。
此函数用作语句的 GROUP BY 的一部分,例如 Select.group_by()
:
stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.grouping_sets(table.c.col_1, table.c.col_2))
为了按多个集合进行分组,请使用 tuple_()
构造:
from sqlalchemy import tuple_ stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2, table.c.col_3 ).group_by( func.grouping_sets( tuple_(table.c.col_1, table.c.col_2), tuple_(table.c.value, table.c.col_3), ) )
版本 1.2 中的新增内容。
类签名
类 sqlalchemy.sql.functions.grouping_sets
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.localtime
localtime() SQL 函数。
类签名
类 sqlalchemy.sql.functions.localtime
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.localtimestamp
localtimestamp() SQL 函数。
类签名
类 sqlalchemy.sql.functions.localtimestamp
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.max
SQL MAX() 聚合函数。
类签名
类 sqlalchemy.sql.functions.max
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
class sqlalchemy.sql.functions.min
SQL MIN() 聚合函数。
类签名
类 sqlalchemy.sql.functions.min
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
class sqlalchemy.sql.functions.mode
实现 mode
排序集合聚合函数。
必须与 FunctionElement.within_group()
修改器一起使用,以提供要操作的排序表达式。
此函数的返回类型与排序表达式相同。
类签名
类 sqlalchemy.sql.functions.mode
(sqlalchemy.sql.functions.OrderedSetAgg
)
class sqlalchemy.sql.functions.next_value
表示“下一个值”,给定 Sequence
作为其唯一参数。
编译为每个后端的适当函数,或者如果在不提供序列支持的后端上使用,则会引发 NotImplementedError。
类签名
类sqlalchemy.sql.functions.next_value
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.now
SQL 的 now()日期时间函数。
SQLAlchemy 方言通常会以特定于后端的方式呈现此特定函数,例如将其呈现为CURRENT_TIMESTAMP
。
类签名
类sqlalchemy.sql.functions.now
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.percent_rank
实现percent_rank
假设集合聚合函数。
必须使用FunctionElement.within_group()
修饰符来提供要操作的排序表达式。
这个函数的返回类型是Numeric
。
类签名
类sqlalchemy.sql.functions.percent_rank
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.percentile_cont
实现percentile_cont
有序集合聚合函数。
必须使用FunctionElement.within_group()
修饰符来提供要操作的排序表达式。
这个函数的返回类型与排序表达式相同,或者如果参数是一个数组,则返回排序表达式类型的ARRAY
。
类签名
类sqlalchemy.sql.functions.percentile_cont
(sqlalchemy.sql.functions.OrderedSetAgg
)
class sqlalchemy.sql.functions.percentile_disc
实现percentile_disc
有序集合聚合函数。
必须使用FunctionElement.within_group()
修饰符来提供要操作的排序表达式。
这个函数的返回类型与排序表达式相同,或者如果参数是一个数组,则返回排序表达式类型的ARRAY
。
类签名
类sqlalchemy.sql.functions.percentile_disc
(sqlalchemy.sql.functions.OrderedSetAgg
)
class sqlalchemy.sql.functions.random
RANDOM() SQL 函数。
类签名
类sqlalchemy.sql.functions.random
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.rank
实现rank
虚拟集合聚合函数。
此函数必须与FunctionElement.within_group()
修饰符一起使用,以提供要操作的排序表达式。
此函数的返回类型为Integer
。
类签名
类sqlalchemy.sql.functions.rank
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.rollup
实现ROLLUP
分组操作。
此函数用作语句的 GROUP BY 的一部分,例如Select.group_by()
:
stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.rollup(table.c.col_1, table.c.col_2))
新版本 1.2 中添加。
类签名
类sqlalchemy.sql.functions.rollup
(sqlalchemy.sql.functions.GenericFunction
)
class sqlalchemy.sql.functions.session_user
SESSION_USER() SQL 函数。
类签名
类sqlalchemy.sql.functions.session_user
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.sum
SQL 的 SUM()聚合函数。
类签名
类sqlalchemy.sql.functions.sum
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
class sqlalchemy.sql.functions.sysdate
SYSDATE() SQL 函数。
类签名
类sqlalchemy.sql.functions.sysdate
(sqlalchemy.sql.functions.AnsiFunction
)
class sqlalchemy.sql.functions.user
USER() SQL 函数。
类签名
类sqlalchemy.sql.functions.user
(sqlalchemy.sql.functions.AnsiFunction
)
函数 API
SQL 函数的基本 API,提供了func
命名空间以及可用于可扩展性的类。
对象名称 | 描述 |
AnsiFunction | 定义以“ansi”格式编写的函数,不渲染括号。 |
Function | 描述一个命名的 SQL 函数。 |
FunctionElement | 面向 SQL 函数构建的基类。 |
GenericFunction | 定义一个“通用”函数。 |
register_function(identifier, fn[, package]) | 将可调用对象与特定的 func. 名称关联起来。 |
class sqlalchemy.sql.functions.AnsiFunction
在“ansi”格式中定义一个不渲染括号的函数。
SqlAlchemy 2.0 中文文档(三十六)(5)https://developer.aliyun.com/article/1562679