Wie um herauszufinden, ob eine faule Beziehung noch nicht geladen ist, mit SQLAlchemy?

StackOverflow https://stackoverflow.com/questions/258775

  •  06-07-2019
  •  | 
  •  

Frage

Mit SQLAlchemy, ist es eine Möglichkeit, im Voraus zu wissen, ob eine Beziehung faul belastet wäre?
Zum Beispiel eine faule Eltern-> Kinder Beziehung und eine Instanz X von „Eltern“ gegeben, würde Ich mag wissen, ob „X.children“ bereits geladen ist, ohne die Abfrage ausgelöst wird.

War es hilfreich?

Lösung

ich glaube, Sie an dem Kind __dict__ Attribut Wörterbuch aussehen könnten zu überprüfen, ob die Daten bereits vorhanden ist oder nicht.

Andere Tipps

Sie können eine Liste aller unbelastet Eigenschaften erhalten (beide Beziehungen und Spalten) von sqlalchemy.orm.attributes.instance_state(obj).unloaded.

Siehe auch: Abschließen Objekt mit seinen Beziehungen und die Vermeidung unnötiger Abfragen in sqlalchemy

Eine einfachere Möglichkeit ist inspect() zu verwenden, die die gleichen Ergebnisse erzielen lassen:

from sqlalchemy import inspect
from sqlalchemy.orm import lazyload

user = session.query(User).options(lazyload(User.articles)).first()
ins = inspect(user)

ins.unloaded  # <- set or properties that are not yet loaded

Ein wenig ordentlicher als Haes Antwort (obwohl es effektiv die gleiche Sache tut) ist hasattr () zu verwenden, wie in:

>>> hasattr(X, 'children')
False
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top