Wie um herauszufinden, ob eine faule Beziehung noch nicht geladen ist, mit SQLAlchemy?
-
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.
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