如何基于列'过滤SQLAlchemy结果?值α

时间:2016-08-01 21:46:44

标签: python orm sqlalchemy

我试图从SQLAlchemy查询序列化结果。我是ORM的新用户,因此我不确定如何在检索结果集后对其进行过滤。如果我要展平对象,结果集看起来像这样:

  

A1 B1 V1

     

A1 B1 V2

     

A2 B2 V3

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

Object1:

  • A:A1

  • B:B1

  • V:{V1,V2}

Object2的:

  • A:A2

  • B:B2

  • V:{V3}

有没有办法迭代给定列上的所有唯一值,但是能否从其他列返回值列表?

2 个答案:

答案 0 :(得分:0)

是的,只需使用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炼金术只是将你的pythony代码翻译成适当的sql,所有其他逻辑通常都留给程序员。

等效的Postgresql

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

答案 1 :(得分:0)

结果我需要使用关联表和joinedload()函数。文档有点不稳定,但我玩了一段时间后就到了那里。