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()