¿Cómo saber si una relación perezosa aún no está cargada, con SQLAlchemy?

StackOverflow https://stackoverflow.com/questions/258775

  •  06-07-2019
  •  | 
  •  

Pregunta

Con SQLAlchemy, ¿hay alguna manera de saber de antemano si una relación estaría cargada de pereza?
Por ejemplo, dada una relación perezosa entre padres e hijos y una instancia X de '' padres '', me gustaría saber si '' X.niños '' ya está cargado, sin activar la consulta.

¿Fue útil?

Solución

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

Otros consejos

Puede obtener una lista de todas las propiedades descargadas (tanto relaciones como columnas) de sqlalchemy.orm.attributes.instance_state (obj) .unloaded .

Ver: Completando el objeto con sus relaciones y evitando 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

Un poco más limpio que la respuesta de Haes (aunque efectivamente hace lo mismo) es usar hasattr (), como en:

>>> hasattr(X, 'children')
False
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top