我试图从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}
有没有办法迭代给定列上的所有唯一值,但是能否从其他列返回值列表?
答案 0 :(得分:0)
是的,只需使用func.array_agg
和group_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()函数。文档有点不稳定,但我玩了一段时间后就到了那里。