query python sqlalchemy

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