基本的には、SQLAlchemy(バージョン1.0.13)が、結合しようとしているテーブルをクエリする際に、他の表の属性はmyrelationship
の関係にあります。次のようにSQLAlchemyが結合関係で2回クエリを実行
関係が定義されている:最初のクエリのために
myrelationship = db.relationship(
'MyChild',
uselist=False,
viewonly=True,
lazy='joined',
foreign_keys=[whatever_id],
primaryjoin=(whatever_id == MyChild.whatever_other_id)
)
、たとえばsession.query(MyParent).filter(...).first()
のために、それは正しくクエリを実行し、意図した動作で参加すると、両方のテーブルからすべての列を取得ありません。
この問題は、myparent.meta.whatever
を実行しようとすると発生し、SQLAlchemyクエリMyChild
は、元のクエリから取得したデータを再利用するのではなく、選択して個別に選択します。
誰かが私が間違って行ったことを示唆することができます。なぜなら、最初のロードで実際に結合を行っているにもかかわらず、キャッシュしたり、どこでも使用したり、
さらに調査した結果、実際にこれが答えていることがわかりました:http://stackoverflow.com/questions/14898379/properway-to-prevent-sqlalchemy-from-re-running-queries-on-expired-objects –