繁体   English   中英

如何在 sqlalchemy 中创建子查询

[英]How to make a subquery in sqlalchemy

SELECT *
FROM Residents
WHERE apartment_id IN (SELECT ID
                       FROM Apartments
                       WHERE postcode = 2000)

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

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

subquery = session.query(Apartments.id).filter(Apartments.postcode==2000).subquery()
query = session.query(Residents).filter(Residents.apartment_id.in_(subquery))

我只是想补充一点,如果您使用这种方法来更新数据库,请确保您添加了synchronize_session='fetch' kwarg。 所以它看起来像:

subquery = session.query(Apartments.id).filter(Apartments.postcode==2000).subquery()
query = session.query(Residents).\
          filter(Residents.apartment_id.in_(subquery)).\
          update({"key": value}, synchronize_session='fetch')

否则你会遇到问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM