Con SQLAlchemy, ¿hay alguna forma de saber de antemano si una relación se cargará de forma diferida?
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.¿Cómo saber si todavía no se ha cargado una relación floja con SQLAlchemy?
Respuesta
Creo que podría consultar el diccionario de atributos __dict__
del niño para verificar si los datos ya están allí o no.
ligeramente más limpio que la respuesta Haes (aunque lo hace de manera efectiva la misma cosa) es utilizar hasattr(), como en:
>>> hasattr(X, 'children')
False
Niza, gracias :) – Joril
Esto no funciona con sqlalchemy actual. 'hasattr (obj, campo)' no es equivalente a 'campo en obj .__ dict__'. –
He probado en SQLAlchemy 0.8 y esto funciona si el objeto está desacoplado. Sin embargo, si está conectado, el uso de hasattr desencadena la carga diferida de 'niños', que probablemente no es lo que quieres. En cambio, en 0.8 podemos usar la llamada a inspeccionar(): 'res = inspeccionar (X)' ''hijos' en res.unloaded' - que funciona independientemente de si el objeto está adjunto o no. – foz
, usted puede obtener una lista de todas las propiedades descargadas (tanto las relaciones y columnas) desde sqlalchemy.orm.attributes.instance_state(obj).unloaded
.
Ver: Completing object with its relations and avoiding unnecessary queries in 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
- 1. En Java, ¿es posible saber si una clase ya se ha cargado?
- 2. ¿Cómo se puede saber cuándo se ha cargado mediante serialización XML?
- 3. Detectar si el contenido del iframe se ha cargado satisfactoriamente
- 4. SQLAlchemy DetachedInstanceError con el atributo regular (no es una relación)
- 5. ¿Hay algún ayuda para saber si Hibernate ha cargado una propiedad?
- 6. Cómo saber si sys.stdout se ha eliminado en Python
- 7. Compruebe si el archivo javascript se ha cargado
- 8. ¿Cómo puedo saber si se ha eliminado un `NSManagedObject`?
- 9. ¿Cómo puedo saber si la computadora se ha reiniciado?
- 10. ¿Cómo agregar un filtro automático a una relación con SQLAlchemy?
- 11. ¿Cómo saber si una imagen se ha subido o no? - Paperclip
- 12. sqlalchemy: relación uno a uno con declaración
- 13. ¿Cómo se determina si CKEditor está cargado?
- 14. ¿Cómo puedo determinar si una imagen se ha cargado usando JavaScript/jQuery?
- 15. Java: Anotación común para "No se ha implementado todavía"
- 16. ¿Cómo verificar si ya se ha cargado una sesión de rieles?
- 17. SQLAlchemy Relación polimórfica con la herencia concreta
- 18. javascript - saber si ya se ha abierto un enlace
- 19. Javascript - Cómo detectar si el documento se ha cargado (IE 7/Firefox 3)
- 20. compruebe si se ha cargado jquery, y luego cárguelo si es falso
- 21. dyld: Biblioteca de error no se ha cargado Mac OS
- 22. gdb: "No se ha cargado ninguna tabla de símbolos"
- 23. ¿Cómo puedo saber si un Arrastramiento ha finalizado en Winforms?
- 24. ¿Cómo saber si el evento $ (window) .load()/window.onload ya se ha activado?
- 25. ¿La mejor manera de determinar si un UIViewController se ha cargado y tiene una vista válida?
- 26. plot.new no ha sido llamado todavía
- 27. getScript - Como sólo para llamar si no se ha llamado
- 28. ¿Cómo saber si una aplicación iOS se ha instalado o actualizado recientemente?
- 29. ¿Cómo saber si el usuario ha actualizado la aplicación o ha instalado una copia nueva?
- 30. ¿Cómo saber si una entidad JPA separada ya ha sido persistente o no?
Funciona, gracias :) – Joril