有没有办法让 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
如果您经常需要这个,和/或计数是您的不可分割的一部分Tab1
模型,您应该使用混合属性,如其他答案中所述。另一方面,如果您只需要单个查询,那么您可以使用以下命令创建标量子查询Query.label() http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.label, or Query.as_scalar() http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.as_scalar:
count_stmt = session.query(func.count(1)).\
filter(Tab2.tab1_id == Tab1.id).\
group_by(Tab2.col1).\
label('cnt')
session.query(Tab1, count_stmt).filter(...).limit(100)
子查询将自动关联 http://docs.sqlalchemy.org/en/latest/core/tutorial.html#correlated-subqueries从随附的查询中可以得到什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)