2013-03-21 55 views
15

我知道我可以使用別名標籤的方法,但我無法弄清楚如何使用標記元素後在查詢 - 類似如下:蟒蛇SQLAlchemy的標籤使用

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

當然,這是行不通的,因爲沒有變量叫做foobar。這怎麼可能完成?

(過度簡化的例子只是爲了方便理解...)

回答

22

隨口說說,我相信你可以使用自己的標記列的表達式:

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

只要把foobar的引號。它會爲order_by這樣工作的:

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

對於過濾器,你可以使用原始SQL條件:

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

這並不適用於我(對於過濾器來說)。 – Ofir 2013-03-21 20:53:26

+0

如何將過濾條件放入原始sql?我已經更新了答案。希望有所幫助。 – alecxe 2013-03-21 21:02:35

+0

儘管這可能有效(我還沒有嘗試過),但我的謂詞包含日期,並且這些字符串在某些數據庫中的字符串效果不佳 – Ofir 2013-03-22 20:41:33