2008-11-03 18 views

Antwort

4

Ich denke, Sie könnten das Attributverzeichnis des Kindes betrachten, um zu überprüfen, ob die Daten bereits da sind oder nicht.

+0

Es funktioniert dank :) – Joril

3

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

>>> hasattr(X, 'children') 
False 
+0

Nizza, Dank :) – Joril

+2

Diese funktioniert nicht mit aktuelle sqlalchemy. 'hasattr (obj, field)' ist nicht äquivalent zu 'field in obj .__ dict__'. –

+0

Ich habe in SQLAlchemy 0.8 getestet und das funktioniert, wenn das Objekt getrennt ist. Wenn es jedoch angehängt wird, löst die Verwendung von hasattr die Lazy Load von 'children' aus, was wahrscheinlich nicht das ist, was Sie wollen. Stattdessen können wir in 0.8 den Aufruf inspect() verwenden: 'res = inspect (X)' ''children' in res.unloaded' - was funktioniert, egal ob das Objekt angehängt oder entfernt wird. – foz

10

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

See: Completing object with its relations and avoiding unnecessary queries in sqlalchemy

Ein einfacherer Weg 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 
Verwandte Themen