2010-03-12 3 views
5

esiste un modo per caricare completamente un'istanza mappata ORM SQLAlchemy (insieme ai relativi oggetti correlati) prima di scollegarla dalla Sessione? Voglio mandarlo via pipe in un altro processo e non voglio fonderlo in sessione in questo nuovo processo.SQLAlchemy - istanza a pieno carico prima di scollegare

Grazie
gen

risposta

2

Credo si vorrà utilizzare il options() method on the Query, with eagerload() or eagerload_all().

Ecco un esempio di utilizzo da una delle nostre applicazioni, dove la classe Controlled ha un rapporto chiamato changes che porta in un mazzo di DocumentChange record, che a loro volta hanno una relazione dco che porta in una Dco oggetto per istanza. Questo è un carico bisogetico a due livelli, quindi l'uso di eagerload_all(). Stiamo usando l'estensione declarative (nel caso sia importante) e m.Session è una sessione "scoped" (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()) 

Se questo non è sufficiente, forse, comprendono un frammento o un testo che mostra come le classi ORM rilevanti sono legati e ho potuto aggiornare la risposta a mostrare come le opzioni sarebbero stati utilizzati nel vostro caso.