如何在sqlalchemy

时间:2016-08-10 16:26:32

标签: python 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(???) 。 我不知道如何用这种格式构建我想要的查询。

2 个答案:

答案 0 :(得分:8)

您可以使用subquery方法

创建子查询
subquery = session.query(Apartments.id).filter(Apartments.postcode==2000).subquery()
query = session.query(Residents).filter(Residents.apartment_id.in_(subquery))

答案 1 :(得分:1)

我只是想添加一下,如果您正在使用此方法更新数据库,请确保添加了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')

否则,您将遇到问题。