2010-03-12 13 views
5

¿Hay alguna forma de cargar completamente alguna instancia asignada de SQLAlchemy ORM (junto con sus objetos relacionados) antes de separarla de la sesión? Deseo enviarlo por tubería a otro proceso y no quiero fusionarlo en sesión en este nuevo proceso.SQLAlchemy: instancia de carga completa antes de separar

Gracias
Ene

Respuesta

2

creo que querrá utilizar el options() method on the Query, with eagerload() or eagerload_all().

He aquí un ejemplo de uso de una de nuestras aplicaciones, donde la clase Controlled tiene una relación llamada changes que trae en un montón de DocumentChange registros, que a su vez tienen una relación dco que reúne en un solo objeto Dco por instancia. Esta es una carga ansiosa de dos niveles, por lo tanto, el uso del eagerload_all(). Estamos utilizando la extensión declarative (en caso de que eso importe) y m.Session es una sesión "con alcance" (thread-local).

from sqlalchemy.orm import eagerload, eagerload_all 
... 
controlled_docs = (m.Session.query(m.Controlled) 
    .options(eagerload_all('changes.dco')) 
    .order_by('number') 
    .all()) 

Si eso no es suficiente, tal vez incluyen un fragmento o texto que muestra cómo se relacionan las clases ORM pertinentes y pude actualizar la respuesta para mostrar cómo se utilizarían esas opciones en su caso.

Cuestiones relacionadas