使用 SQLAlchemy 生成带有子查询作为 select 语句中的列的 sql

2024-03-20

有没有办法让 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(使用前将#替换为@)

使用 SQLAlchemy 生成带有子查询作为 select 语句中的列的 sql 的相关文章

随机推荐