【问题标题】:How do I filter SQLAlchemy results based on a columns' value?如何根据列的值过滤 SQLAlchemy 结果?
【发布时间】:2016-08-01 21:46:44
【问题描述】:

我正在尝试序列化 SQLAlchemy 查询的结果。我是 ORM 的新手,所以我不确定在检索结果集后如何过滤它。如果我要展平对象,结果集如下所示:

A1 B1 V1

A1 B1 V2

A2 B2 V3

我需要将这些序列化为一个对象列表,每个 A 的唯一值 1 个,每个对象都有一个 V 值列表。即:

对象1:

  • 答:A1

  • B:B1

  • V:{V1,V2}

对象2:

  • A:A2

  • B:B2

  • V:{V3}

有没有办法遍历给定列上的所有唯一值,但能够从其他列返回值列表?

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    是的,只需使用 func.array_agggroup_by

    import sqlalchemy.sql.functions as func
    session.query(Object.col1, Object.col2, func.array_agg(Object.col3))
         .group_by(Object.col1)
         .group_by(Object.col2)
         .all()
    

    但这仅适用于具有等效聚合函数的数据库后端,除此之外,您只需要通过伪函数编写自己的组。 Sql alchemy 只是将你的 pythony 代码转换为适当的 sql,所有其他逻辑通常留给程序员。

    等效的 Postgresql

    SELECT col1, col2, array_agg(col3)
    FROM objects
    GROUP BY col1, col2;
    

    【讨论】:

      【解决方案2】:

      原来我需要使用关联表和joinedload() 函数。文档有点不靠谱,但我玩了一会儿就到了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多