2013-03-21 17 views
15

Ich weiß, dass ich das Label Methode für Alias ​​verwenden kann, aber ich kann nicht herausfinden, wie das markierte Element verwenden später in der Abfrage - in etwa wie folgt:Python sqlalchemy Etikett Verwendung

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

Natürlich , das funktioniert nicht, da es keine Variable namens foobar gibt. Wie könnte dies erreicht werden?

(Die vereinfachte Beispiel war nur für eine einfache Verständnis ...)

Antwort

22

Offhand, ich glaube, Sie die markierte Spalte selbst als Ausdruck verwenden können:

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

nur in Anführungszeichen foobar. Es wird für order_by wie diese Arbeit:

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

Für Filter können Sie rohe SQL-Bedingungen verwenden:

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

Das hat nicht für mich funktioniert (für Filter das ist). – Ofir

+0

Wie wäre es, Filterbedingungen in rohe SQL zu setzen? Ich habe die Antwort aktualisiert. Ich hoffe, das hilft. – alecxe

+0

Obwohl dies funktionieren könnte (ich habe es nicht versucht), enthält mein Prädikat Daten und diese funktioniert nicht gut mit Strings in einigen DBs – Ofir

Verwandte Themen