python - query - ¿Cómo saber si todavía no se ha cargado una relación floja con SQLAlchemy?
sqlalchemy select (3)
Creo que podrías mirar el diccionario de atributos __dict__
del niño para verificar si los datos ya están allí o no.
Con SQLAlchemy, ¿hay alguna manera de saber de antemano si una relación estaría cargada de pereza?
Por ejemplo, dada una relación padre-hijo floja y una instancia X de "padre", me gustaría saber si "X.children" ya está cargado, sin activar la consulta.
Un poco más ordenado que la respuesta de Haes (aunque efectivamente hace lo mismo) es usar hasattr (), como en:
>>> hasattr(X, ''children'')
False
Puede obtener una lista de todas las propiedades descargadas (tanto relaciones como columnas) de sqlalchemy.orm.attributes.instance_state(obj).unloaded
.
Ver: Completar objeto con sus relaciones y evitar consultas innecesarias en 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