2 回答

TA贡献1798条经验 获得超7个赞
我想知道你是否已经用它作为参考,并且忘记使用FunctionElement.alias()
来生成一个可选的函数表达式。现在,您正在传递 set 返回函数表达式,如 ON 子句谓词的右侧所示。请改用 column()
来引用系列中的日期。控制连接的左侧是使用 Query.s
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()
elect_from() 完成的
:generate_series()

TA贡献1876条经验 获得超5个赞
此代码适用于 sqlalchemy 1.4 和异步的最新更新
start = ...
end = datetime.now()
date_list = select(
func.generate_series(
start, end, timedelta(month=1)
).label('month')
).subquery()
response = await db_session.exec(
select(
func.count(Event.id),
func.date_trunc('day', date_list.c.month)
)
.join(
date_list,
func.date_trunc('month', Event.time)
== func.date_trunc('month', date_list.c.month),
)
.order_by(date_list.c.month.desc())
.group_by(date_list.c.month)
)
response = response.all()
添加回答
举报