Mit SQLAlchemy, gibt es eine Möglichkeit, vorher zu wissen, ob eine Beziehung lazy-loaded wäre?
Zum Beispiel würde ich angesichts einer faulen Eltern-> Kinder-Beziehung und einer Instanz X von "Eltern" gerne wissen, ob "X.children" bereits geladen ist, ohne die Abfrage auszulösen.Wie kann man herausfinden, ob eine Lazy-Relation mit SQLAlchemy noch nicht geladen ist?
Antwort
Ich denke, Sie könnten das Attributverzeichnis des Kindes betrachten, um zu überprüfen, ob die Daten bereits da sind oder nicht.
etwas ordentlicher als Haes Antwort (obwohl es effektiv die gleiche Sache tut) ist hasattr() zu verwenden, wie in:
>>> hasattr(X, 'children')
False
Nizza, Dank :) – Joril
Diese funktioniert nicht mit aktuelle sqlalchemy. 'hasattr (obj, field)' ist nicht äquivalent zu 'field in obj .__ dict__'. –
Ich habe in SQLAlchemy 0.8 getestet und das funktioniert, wenn das Objekt getrennt ist. Wenn es jedoch angehängt wird, löst die Verwendung von hasattr die Lazy Load von 'children' aus, was wahrscheinlich nicht das ist, was Sie wollen. Stattdessen können wir in 0.8 den Aufruf inspect() verwenden: 'res = inspect (X)' ''children' in res.unloaded' - was funktioniert, egal ob das Objekt angehängt oder entfernt wird. – foz
Sie können eine Liste aller unbelastet Eigenschaften erhalten (beide Beziehungen und Spalten) von sqlalchemy.orm.attributes.instance_state(obj).unloaded
.
See: Completing object with its relations and avoiding unnecessary queries in sqlalchemy
Ein einfacherer Weg ist inspect()
, zu verwenden, die die gleichen Ergebnisse erzielen lassen:
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. Wie kann ich herausfinden, ob AdMob eine Anzeige geladen hat?
- 2. Wie kann man herausfinden, ob der Benutzer immer noch mit der sessionbasierten Authentifizierung angemeldet ist?
- 3. Wie man einen Ladebildschirm in Unity erstellt, der herausfinden kann, ob die Szene voll geladen ist
- 4. Wie überprüft man, ob eine Assoziation nicht geladen ist?
- 5. Herausfinden, ob eine Spalte NICHT NULL ist
- 6. Wie kann man herausfinden, ob ein Perl-Hash multidimensional ist?
- 7. Wie kann man herausfinden, ob Bluetooth angeschlossen ist?
- 8. Wie überprüft man, ob mithril.js geladen ist?
- 9. Wie kann ich herausfinden, ob ein SKTexture das Platzhalterbild ist?
- 10. Wie überprüft man, ob eine Variable in JavaScript geladen ist?
- 11. Wie man herausfinden kann, ob eine Uber-Fahrt tatsächlich eine UberEats-Lieferung ist
- 12. Kann nicht herausfinden, wie man eine Methode in einen String
- 13. Wie kann ich herausfinden, ob eine Datei geändert wurde?
- 14. Wie kann man herausfinden, ob ein Programm mit einem Subprozess abgestürzt ist?
- 15. Kann nicht herausfinden, wie man Text style
- 16. Reagieren - kann ich herausfinden, ob eine Komponente gerade sichtbar ist
- 17. Wie man eine Fremdschlüsselreferenz mit sqlalchemy erstellt
- 18. Wie kann man herausfinden, ob sich zwei CGRect schneiden?
- 19. Wie kann man herausfinden, ob ein Satz eine Frage ist (Fragewort)?
- 20. Kann nicht herausfinden, wie man NaN loswerden
- 21. Wie ermittelt man, ob die Rails-Assoziation geladen ist?
- 22. Ich kann nicht herausfinden, wie man eine Zeichenfolge in bash
- 23. Wie kann man herausfinden, ob eine gegebene Funktion O (n) ist?
- 24. Wie kann man herausfinden, welche Ausnahme eine Funktion auslösen kann?
- 25. Wie kann man herausfinden, ob der PC mit einem Netzwerk verbunden ist?
- 26. Wie kann man herausfinden, ob die Schaltfläche "navbar-toggle" mit Javascript verdeckt oder verborgen ist?
- 27. Java: Herausfinden, warum * eine Klasse geladen wird
- 28. Wie überprüft man, ob jQuery Validation Engine geladen ist?
- 29. Wie überprüft man, ob ein Client noch verbunden ist? C++
- 30. Wie kann man herausfinden, ob der Computer mit dem Internet verbunden ist?
Es funktioniert dank :) – Joril