如何使用 SQLAlchemy 加入generate_series

Dav*_*vid 3 python postgresql sqlalchemy

我正在尝试按月对一些事件进行分类。

date_list = func.generate_series(start, end, '1 month')

db.session.query(func.count(Event.id)).join(date_list, true()).outerjoin(Event, Event.time==func.date(date_list)).all()
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

NotSupportedError: (psycopg2.errors.FeatureNotSupported) 在 JOIN 条件中不允许使用集合返回函数

在 SQLAlchemy 连接的左侧使用一系列,然后使用类似计数的聚合的简单示例是什么?

Ilj*_*ilä 5

我想知道您是否已使用作为参考,而忘记使用它FunctionElement.alias()来生成函数表达式之外的可选内容generate_series()。现在,您将按 ON 子句谓词右侧的方式传递集合返回函数表达式。而是用来column()引用系列中的日期。控制连接的左侧是使用以下命令完成的Query.select_from()

from sqlalchemy import func, column

start = ...
end = ...
date_list = func.generate_series(start, end, '1 month').alias('month')
month = column('month')

db.session.query(month, func.count(Event.id)).\
    select_from(date_list).\
    outerjoin(Event, func.date_trunc('month', Event.time) == month).\
    group_by(month)
    all()
Run Code Online (Sandbox Code Playgroud)