2013-03-21 10 views
15

So che posso utilizzare il metodo etichetta per alias, ma non riesco a capire come utilizzare l'elemento etichettato in seguito nell'interrogazione - qualcosa di simile al seguente:pitone di utilizzo di etichetta sqlalchemy

session.query(Foo.bar.label("foobar")).filter(foobar > 10).all() 

Naturalmente , questo non funziona poiché non esiste una variabile chiamata foobar. Come potrebbe essere realizzato?

(L'esempio sopra semplificato è stato solo per una facile comprensione ...)

risposta

22

Lì per lì, io credo che si possa utilizzare la colonna etichettata in sé come espressione:

foobar = Foo.bar.label("foobar") 
session.query(foobar).filter(foobar > 10).all() 
10

Basta mettere foobar tra virgolette. E lavorerò per order_by come questo:

session.query(Foo.bar.label("foobar")).order_by('foobar').all() 

Per il filtro è possibile utilizzare condizioni di SQL prime:

session.query(Foo.bar.label("foobar")).filter("foobar > 10").all() 
+3

Che non ha funzionato per me (per il filtro che è). – Ofir

+0

Come mettere le condizioni del filtro in sql raw? Ho aggiornato la risposta. Spero possa aiutare. – alecxe

+0

Anche se questo potrebbe funzionare (non l'ho provato), il mio predicato include le date e quelle non funzionano bene con le stringhe in alcuni DB – Ofir

Problemi correlati