在SQLAlchemy中有选择地加载backrefs

时间:2016-05-31 13:14:55

标签: python sqlalchemy

按照此处的示例:http://docs.sqlalchemy.org/en/latest/orm/loading_relationships.html,您可以轻松加载所有 User的地址,其名称为Jack,如下所示:

jack = session.query(User).options(joinedload('addresses')).\
       filter_by(name='jack').all()

但是,没有关于如何仅加载符合特定条件的地址的示例 - 假设我只希望杰克的那些地址以' @ google.com'结尾。

SQLAlchemy是否可以这样做 - 具体来说,我可以将某些内容传递给允许我过滤地址的joinedload()subqueryload()吗?

1 个答案:

答案 0 :(得分:1)

您必须手动加入,然后指定contains_eager,如下所示:

session.query(User).join(User.addresses) \
                   .filter(User.name == "jack",
                           Address.email.like("%@google.com")) \
                   .options(contains_eager(User.addresses))

这是docs中的概要。