2016-06-24 5 views
0

基本的には、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は、元のクエリから取得したデータを再利用するのではなく、選択して個別に選択します。

誰かが私が間違って行ったことを示唆することができます。なぜなら、最初のロードで実際に結合を行っているにもかかわらず、キャッシュしたり、どこでも使用したり、

+0

さらに調査した結果、実際にこれが答えていることがわかりました:http://stackoverflow.com/questions/14898379/properway-to-prevent-sqlalchemy-from-re-running-queries-on-expired-objects –

答えて

0

これは、期限切れの原因となったデータの取得と読み取りの間のコミットによるものです。そのセッションにexpire_on_commit = Falseを使用して解決しました。

関連する問題