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'が見つかりません。ルート(マッパー|ルート|ルート)からターゲットエンティティへのフルパスを指定する必要があることに注意してください。

それがサブクラスを介してルートエンティティに関連していることを考えると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 に答える