Avec SQLAlchemy, existe-t-il un moyen de savoir à l'avance si une relation serait paresseuse?
Par exemple, étant donné une relation paresseuse parent-> enfants et une instance X de "parent", j'aimerais savoir si "X.children" est déjà chargé, sans déclencher la requête.Comment savoir si une relation paresseuse n'est pas encore chargée, avec SQLAlchemy?
Répondre
Je pense que vous pouvez regarder le dictionnaire __dict__
d'attribut de l'enfant pour vérifier si les données sont déjà là ou non.
légèrement plus propre que Haes réponse (si elle fait effectivement la même chose) est d'utiliser hasattr(), comme dans:
>>> hasattr(X, 'children')
False
Nice, merci :) – Joril
Cela ne fonctionne pas avec sqlalchemy actuel. 'hasattr (obj, field)' n'est pas équivalent à 'field dans obj .__ dict__'. –
J'ai testé dans SQLAlchemy 0.8 et cela fonctionne si l'objet est détaché. Cependant, si elle est attachée, l'utilisation de hasattr déclenche la charge paresseuse des 'enfants', ce qui n'est probablement pas ce que vous voulez. Au lieu de 0.8, nous pouvons utiliser l'appel inspect(): res = inspect (X) '' 'children' dans res.unloaded' - qui fonctionne si l'objet est attaché ou détaché. – foz
Vous pouvez obtenir une liste de toutes les propriétés débarquées (les relations et colonnes) à partir de sqlalchemy.orm.attributes.instance_state(obj).unloaded
.
Voir: Completing object with its relations and avoiding unnecessary queries in sqlalchemy
Un moyen plus facile est d'utiliser inspect()
, 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
- 1. Comment ajouter un filtre automatique à une relation avec SQLAlchemy?
- 2. Comment savoir si une ligne n'existe pas?
- 3. Comment savoir si une DLL donnée est chargée par un processus donné?
- 4. Java Stack/Nest Count
- 5. String.format avec évaluation paresseuse
- 6. JavaScript: Savoir quand une image est complètement chargée
- 7. rappel Javascript pour savoir quand une image est chargée
- 8. Charger une relation de table many-to-many existante avec sqlalchemy
- 9. Encore une fois avec JPA n'a pas de sens
- 10. Comment savoir si urllib.urlretrieve réussit?
- 11. Est-il nécessaire de mettre en cache les données pour une propriété chargée paresseuse avec le dépôt simple Subsonic 3?
- 12. PHP Comment savoir si une variable est une référence?
- 13. SQLAlchemy - MapperExtension.before_delete pas appelé
- 14. Comment savoir si je cours depuis le GAC ou pas?
- 15. Comment savoir si une propriété est une collection générique
- 16. Évaluation paresseuse dans SSRS
- 17. Comment savoir si une case à cocher est cochée avec juste la balise de formulaire {{formickeck}}
- 18. Puis-je savoir si une propriété est sale avec nhibernate?
- 19. Vérifiez si une bibliothèque DLL est déjà chargée? (Java)
- 20. Unicode Problème avec SQLAlchemy
- 21. Comment savoir si une ligne intersecte un polygone en C#?
- 22. Comment savoir si une variable C integer est signée?
- 23. Comment savoir si une classe peut être sérialisée?
- 24. Comment savoir si WebBrowser navigue sur une page d'erreur?
- 25. Comment savoir si une fenêtre est active? (Win32 API)
- 26. SQLAlchemy - problème de MappedCollection
- 27. Comment savoir si dll RAPI est existant
- 28. Comment savoir si une classe descend d'une autre classe
- 29. Comment savoir si vos migrations sont à jour avec migratordotnet?
- 30. Comment savoir si une référence d'objet IDisposable est supprimée?
Il fonctionne, thanks – Joril