2013-01-19 47 views
4

我有一個像指定的完整路徑實體與contains_eager)繼承層次(

(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: Can't find property 'related2' on any entity specified in this Query. Note the full path from root (Mapper|Root|root) to target entity must be specified.

鑑於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: Can't find property named 'related1' on the mapped entity Mapper|Root|root in this Query.

我怎麼可以指定間接相關實體的完整路徑contains_eager()

回答

8

contains_eager需要從實體完整路徑查詢知道:

contains_eager(Subclass.related1, Related1.related2) 
+0

好的,謝謝。現在我可以看到它實際上是在文檔中。 –