11

我有一个像这样的查询

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1)))

到目前为止,一切正常。

我也想急切地加载Related1.related2,我试过这个:

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1))
    .outerjoin(Related1.related2).options(contains_eager(Related1.related2)))

但它不起作用:

sqlalchemy.exc.ArgumentError:在此查询中指定的任何实体上都找不到属性“related2”。请注意,必须指定从根 (Mapper|Root|root) 到目标实体的完整路径。

鉴于它related1通过子类与根实体相关,我看不到如何指定完整路径。

我也试过

(session.query(Root).with_polymorphic('*')
    .outerjoin(Subclass.related1).options(contains_eager(Subclass.related1))
    .outerjoin(Related1.related2).options(contains_eager('related1.related2')))

可以预见的是失败了

sqlalchemy.exc.ArgumentError:在此查询中的映射实体 Mapper|Root|root 上找不到名为“related1”的属性。

如何在 中指定间接相关实体的完整路径contains_eager()

4

1 回答 1

16

contains_eager 需要查询知道的实体的完整路径:

contains_eager(Subclass.related1, Related1.related2)
于 2013-01-21T02:09:44.817 回答