SQLAlchemy:运行 聚合函数
SQLAlchemy: Run aggregate functions
我有 table 两列:
- 姓名
- 天
系统间缓存数据库
|name |days |
|'Tom' |'2,3,5'|
|'Bill'|'0,3' |
|'Ted' |'1,6' |
0 - 星期一
1 - 星期二
...
6 - 星期日
我要收回每一个时间在今天的名字
有%LISTFROMSTRING(string, delimiter)函数
所以:
db.query(Table.name).filter(
literal(
str(datetime.utcnow().weekday())
).in_(func.LISTFROMSTRING(Table.days, ",")
)
datetime.utcnow().weekday()
- returns 相应的整数 (0-6)
但是SQLAlchemy无法识别这个函数,因为开头有$符号。
如何在 SQLAlchemy 中使用 %LISTFROMSTRING 聚合函数?
这是您需要的查询
db.session.query(
TempTable,
).filter(
TempTable.days.contains(
cast(func.extract('isodow', func.now()) - 1, String)
)
)
或
db.session.query(
Table.name
).filter(
func.extract('isodow', func.now()) - 1 == any_( -- check if today is subset of any days
func.cast( -- split days by comma and cast to array of integer
func.string_to_array(Table.days, ','),
ARRAY(Integer)
)
)
).all()
您可以使用 SQLAlchemy 列运算符 contains
db.session.query(
Table.name
).filter(
Table.days.contains(str(datetime.utcnow().weekday()))
).all()
我有 table 两列:
- 姓名
- 天
系统间缓存数据库
|name |days |
|'Tom' |'2,3,5'|
|'Bill'|'0,3' |
|'Ted' |'1,6' |
0 - 星期一 1 - 星期二 ... 6 - 星期日
我要收回每一个时间在今天的名字
有%LISTFROMSTRING(string, delimiter)函数 所以:
db.query(Table.name).filter(
literal(
str(datetime.utcnow().weekday())
).in_(func.LISTFROMSTRING(Table.days, ",")
)
datetime.utcnow().weekday()
- returns 相应的整数 (0-6)
但是SQLAlchemy无法识别这个函数,因为开头有$符号。
如何在 SQLAlchemy 中使用 %LISTFROMSTRING 聚合函数?
这是您需要的查询
db.session.query(
TempTable,
).filter(
TempTable.days.contains(
cast(func.extract('isodow', func.now()) - 1, String)
)
)
或
db.session.query(
Table.name
).filter(
func.extract('isodow', func.now()) - 1 == any_( -- check if today is subset of any days
func.cast( -- split days by comma and cast to array of integer
func.string_to_array(Table.days, ','),
ARRAY(Integer)
)
)
).all()
您可以使用 SQLAlchemy 列运算符 contains
db.session.query(
Table.name
).filter(
Table.days.contains(str(datetime.utcnow().weekday()))
).all()