7
に参加する:すなわちは、私は次のクラス持っ
class A:
a_id = Column(Integer, primary_key=True)
a_remote = Column(UnicodeText)
class B:
b_id = Column(Integer, primary_key=True)
foreign_to_a = Column(UnicodeText)
maximum_a = relationship(A, primaryjoin=lambda:
and_(remote(a_remote) == foreign(foreign_to_a),
A.a_id = select([func.max(A.a_id)]).where(A.a_remote == B.foreign_to_a))
)
を、私はすべてのAさんは、与えられたBによって指さの最大a_id
との関係maximum_a
を作成しようとしています私は具体的にこれを関係にして、joinedload
でプリフェッチできるようにして、O(N)クエリーがある場合を避けるようにします。
私は(例えばsession.query(B).options(joinedload('maximum_a')).all()
経由)maximum_a
関係をプリロードしようとすると、私は次のエラーを取得する:
sqlalchemy.exc.InvalidRequestError: Select statement 'SELECT max(a_1.a_id) AS max_1
FROM a AS a_1, b
WHERE a_1.a_remote = b.foreign_to_a' returned no FROM clauses due to auto-correlation; specify correlate(<tables>) to control correlation manually.
私は相関のSQLAのドキュメントを読むことを試みたが、それらはすべてで書かれていますORMの呼び出しではなく、select
という生の言葉を使用しています。その説明はあまり明確ではないので、correlate
の呼び出しをどこに追加するのかわかりません。
提案がありますか?ありがとう!ずっとしようとした後
たぶん、[継承や多型のロード]を見てみましょう(http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#結合テーブル継承) – sytech
これはどのように関連性がありますか?この問題は、継承や多型に関係していないようです。 –
申し訳ありません、ベン。私はこの質問を誤解しているかもしれません。私は、目的の結果を得る手段として継承を提案していましたが、質問を読み返した後、私はあなたのケースに合っているとは思わないのです。 – sytech