有没有一种方法可以让SQLAlchemy生成一个带有自定义列的查询,该自定义列是一个与当前行相关的子查询:
SELECT
tab1.id,
tab1.col1,
...,
(
SELECT count(1) FROM tab2
WHERE tab2.tab1_id = tab1.id
GROUP BY tab2.col1
) as cnt
FROM tab1
WHERE ...
LIMIT 100
字符串
使用ORM API?
session.query(Tab1, ?(subquery for additional column)?).filter(...).limit(100)
型
我使用PostgreSQL 9.3和旧版本的SQLAlchemy 0.9.8
3条答案
按热度按时间fkaflof61#
如果你经常需要这个属性,并且/或者count是
Tab1
模型的一个组成部分,你应该使用一个混合属性,比如在另一个答案中描述的。另一方面,如果你只需要一个查询,那么你可以使用Query.label()
或Query.as_scalar()
创建标量子查询:字符串
子查询将自动关联它可以从封闭查询中得到的内容。
vd8tlhqk2#
你可以这样做,但是它的工作方式与你写的完全不同。你可以创建一个Tab1的属性,它取决于与tab2的关系(假设
tab2.tab1_id
是一个外键,它应该是。你的模型看起来像这样:
字符串
根据the docs on relationships
然后,您可以添加类似于
型
到父模型,根据this answer和更多文档。
完成此操作后,可以像过滤其他基于列的属性一样过滤此属性。
7tofc5zh3#
SQLAlchemy 2用户
只需为子查询语句定义一个
select
语句,然后就可以将其用作另一个select
语句中的列。以Ilja Everilä为例:
字符串
更多的细节在SQLAlchemy 2.0文档中。