sqlalchemyでselect句にサブクエリを指定する
select
table1.*,
(select count(1) from table2 where table2.table1_id = table1.id group by table2.col1) as cnt
from table1
where ...;
count_stmt = session.query(func.count(1))\
.filter(Table2.table1_id == Table1.id)\
.group_by(Table2.col1)\
.label('cnt')
session.query(Table1, count_stmt).filter(...).all()
参考
ありがてえ😘
途中で出会ったエラー
sqlalchemy.exc.InvalidRequestError: Select statement '...' returned no FROM clauses due to auto-correlation; specify correlate(<tables>) to control correlation manually.
原因
- サブクエリの
.label()
を書き忘れていた - join句を忘れていた
など