【问题标题】:如何使用 SQLAlchemy ORM 创建自定义聚合函数?
【发布时间】:2022-01-12 22:01:14
【问题描述】:

使用 AsyncSession、Postgres 后端、Python 3.6 的 SQLAlchemy 1.4 ORM

我正在尝试使用SQLAlchemy ORM 创建自定义聚合函数。 SQL 查询类似于:

COUNT({group_by_function}),{group_by_function} AS {aggregated_field_name)}

我一直在寻找这方面的信息。

我知道这可以首先在 Postgres db 内部创建,然后由 SA 使用,但这对于我正在使用的代码库的设置方式会产生问题。

我知道SQLAlchemy-Utilsfunctionality,但我不想使用外部库。

我能找到的关于这个主题的最直接的post 说“新聚合函数的创建依赖于后端,并且必须直接使用下划线连接的 API 来完成。”但这是几年前的事了,我认为从那以后可能会有更新。

我是否遗漏了 SA ORM 文档中讨论此问题的内容,或者 SA 不支持此内容,句号?

【问题讨论】:

    标签: postgresql sqlalchemy python-3.6 aggregate-functions sqlalchemy-utils


    【解决方案1】:

    你可以试试这个查询

    query = db.session.query(Model)\
        .with_entities(
            Model.id, 
            func.sum(Model.number).label('total_sum')
        ).group_by(Model.id)
    

    【讨论】:

    • 感谢您的建议,我将尝试实施。
    • 我正在使用带有 SA ORM 的异步引擎会话,并且根据我尝试将其连接到现有查询的方式,AttributeError: 'function' object has no attribute 'with_entities'AttributeError: 'Select' object has no attribute 'with_entities'AttributeError: 'Select' object has no attribute 'func' 的建议查询错误.关于如何将此代码与Async select 类型的查询一起使用的任何想法?
    猜你喜欢
    • 2017-07-31
    • 2019-03-25
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2018-07-20
    相关资源
    最近更新 更多