如何在sqlalchemy中创建子查询

use*_*804 4 python sqlalchemy

SELECT *
FROM Residents
WHERE apartment_id IN (SELECT ID
                       FROM Apartments
                       WHERE postcode = 2000)
Run Code Online (Sandbox Code Playgroud)

我正在使用sqlalchemy并尝试执行上述查询.我无法使用原始SQL执行它,db.engine.execute(sql)因为它抱怨我的关系不存在...但我使用这种格式成功查询我的数据库:session.Query(Residents).filter_by(???).不过,我无法弄清楚如何用这种格式构建我想要的查询.

r-m*_*m-n 11

您可以使用子查询方法创建子查询

subquery = session.query(Apartments.id).filter(Apartments.postcode==2000).subquery()
query = session.query(Residents).filter(Residents.apartment_id.in_(subquery))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢我的主。最后一个不涉及弄乱 orm 的答案。 (2认同)
  • 回答了我自己的简单问题。只需按如下方式编写即可解决警告:`from sqlalchemy.sql import select`和`query = session.query(Residents).filter(Residents.apartment_id.in_(select(subquery)))` (2认同)