2008-11-03 8 views

Respuesta

4

Creo que podría consultar el diccionario de atributos __dict__ del niño para verificar si los datos ya están allí o no.

+0

Funciona, gracias :) – Joril

3

ligeramente más limpio que la respuesta Haes (aunque lo hace de manera efectiva la misma cosa) es utilizar hasattr(), como en:

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

Niza, gracias :) – Joril

+2

Esto no funciona con sqlalchemy actual. 'hasattr (obj, campo)' no es equivalente a 'campo en obj .__ dict__'. –

+0

He probado en SQLAlchemy 0.8 y esto funciona si el objeto está desacoplado. Sin embargo, si está conectado, el uso de hasattr desencadena la carga diferida de 'niños', que probablemente no es lo que quieres. En cambio, en 0.8 podemos usar la llamada a inspeccionar(): 'res = inspeccionar (X)' ''hijos' en res.unloaded' - que funciona independientemente de si el objeto está adjunto o no. – foz

10

, usted puede obtener una lista de todas las propiedades descargadas (tanto las relaciones y columnas) desde sqlalchemy.orm.attributes.instance_state(obj).unloaded.

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

Una forma más fácil es usar inspect(), que da los mismos resultados:

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 
Cuestiones relacionadas