2016-06-24 1 views
0

Im Grunde laufe ich auf ein Problem, wo SQLAlchemy (Version 1.0.13) endet die Abfrage der Tabelle, die als Join geladen werden soll, separat, wenn ich versuche, auf alle zugreifen Attribut der anderen Tabelle durch die myrelationship Beziehung.SQLAlchemy Abfrage zweimal mit einer verbundenen Beziehung

Die Beziehung ist wie folgt definiert:

myrelationship = db.relationship(
    'MyChild', 
    uselist=False, 
    viewonly=True, 
    lazy='joined', 
    foreign_keys=[whatever_id], 
    primaryjoin=(whatever_id == MyChild.whatever_other_id) 
) 

Für die erste Abfrage, zum Beispiel session.query(MyParent).filter(...).first(), es nicht korrekt abfragen und alle Spalten aus beiden Tabellen mit einem Join abrufen, die das gewünschte Verhalten ist.

Das Problem tritt auf, wenn ich versuche myparent.meta.whatever zu tun, die SQLAlchemy Query MyChild einzeln durch eine Auswahl macht statt die Daten erneut zu verwenden, die es von der ursprünglichen Abfrage erhalten (und verworfen) hat.

Kann jemand vorschlagen, was ich falsch gemacht habe und warum, obwohl tatsächlich die Join beim ersten Laden, es nicht zwischenspeichern oder irgendwo und lädt stattdessen die zweite Tabelle wieder durch eine separate Auswahl?

+0

Nach mehr Forschung, fand heraus, dass dies tatsächlich beantwortet es: http://StackOverflow.com/Questions/14898379/proper-way-to-prevent-sqlalchemy-from-r-running-queries-on-expired-Objects –

Antwort

0

Dies lag an einem Commit zwischen dem Abrufen und Lesen der Daten, die es ablaufen ließ. Gelöst durch Verwendung von expire_on_commit = False für diese Sitzung.

Verwandte Themen