Comment savoir si une relation paresseuse n'est pas encore chargée avec SQLAlchemy?

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

  •  06-07-2019
  •  | 
  •  

Question

Avec SQLAlchemy, existe-t-il un moyen de savoir à l'avance si une relation serait chargée paresseux?
Par exemple, dans le cas d'une relation parent paresseux avec enfants et d'une instance X de "parent", j'aimerais savoir si "X.children" est déjà chargé, sans déclencher la requête.

Était-ce utile?

La solution

Je pense que vous pourriez consulter le dictionnaire d'attributs __ dict __ de l'enfant pour vérifier si les données sont déjà présentes ou non.

Autres conseils

Vous pouvez obtenir une liste de toutes les propriétés non chargées (relations et colonnes) à partir de sqlalchemy.orm.attributes.instance_state (obj) .unloaded .

Voir: Finalisation d'objet avec ses relations et éviter les requêtes inutiles dans sqlalchemy

Un moyen plus simple consiste à utiliser inspect () , ce qui donne les mêmes résultats:

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

Une réponse un peu plus nette que Haes (bien que ce soit la même chose) consiste à utiliser hasattr (), comme dans:

>>> hasattr(X, 'children')
False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top