为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 SQLAlchemy 加入generate_series

如何使用 SQLAlchemy 加入generate_series

繁星淼淼 2022-08-25 13:34:22
我正在尝试按月打包一些事件。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()但是我收到一个错误:不支持错误: (psycopg2.errors.FeatureNotSuped) 在 JOIN 条件中不允许使用返回集函数将连接左侧的序列与 SQLAlchemy 结合使用,然后使用聚合式计数的简单示例是什么?
查看完整描述

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

查看完整回答
反对 回复 2022-08-25
?
慕运维8079593

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


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号