SQLAlchemy ORM:修改查询返回的列


问题内容

如果我有一个SQLAlchemy ORM查询:

admin_users = Session.query(User).filter_by(is_admin=True)

是否可以修改该查询返回的列?

例如,这样我就可以只选择该User.id列,并在子查询中使用它:

admin_email_addresses = Session.query(EmailAddress)\
    .filter(EmailAddress.user_id.in_(admin_users.select_columns(User.id))

注意:该.values()方法将不起作用,因为它执行查询并返回可迭代的结果(因此,例如,EmailAddress.user_id.in_(admin_users.values(User.id))将执行两个查询,而不是一个)。

我知道我可以将第一个查询修改为Session.query(User.id),但是我特别想知道如何修改查询返回的列。


问题答案:

我觉得你在这values()件事上很痛苦。在0.6.5中,我添加了一个with_entities()values()除了不进行迭代之外:

q = q.with_entities(User.id)