2013-03-21 70 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