2015-10-06 4 views
8

voglio interrogare questa struttura:SQLAlchemy: eager loading di più di una relazione

A -> B 
B -> C 
B -> D 

qual è la sintassi per fare questo con l'interfaccia di carico, la documentazione non è molto chiaro su questo (http://docs.sqlalchemy.org/en/latest/orm/loading_relationships.html#sqlalchemy.orm.joinedload). Tutto quello che vedo è come fare:

A -> B 
B -> C 
C -> D 

Data la query:

query(A).options(joinedload(A.b).joinedload(B.c)) 

Come faccio ad andare a ritroso nella catena per specificare il secondo rapporto sulla B (B.d)?

+0

Se ho capito bene la tua domanda. Credo che potresti usare un "backref" se ce l'hai. Altrimenti, potresti volerlo definire nella tua dichiarazione 'relationship'. – adarsh

risposta

8

Basta aggiungere un altro .options(...) con un nuovo percorso relazione:

q = (
    session 
    .query(A) 
    .options(joinedload(A.b).joinedload(B.c)) 
    .options(joinedload(A.b).joinedload(B.d)) 
) 
+0

non puoi passare anche più opzioni come argomenti posizionali come questo: '.options (joinload (...). Joinload (...), joinload (...). Joinload (...))'? – Bob