28

我知道我可以对别名使用标签方法,但我不知道如何在查询的后面使用标签元素 - 如下所示:

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

当然,这是行不通的,因为没有名为 foobar 的变量。这怎么可能实现?

(过度简化的例子只是为了便于理解......)

4

2 回答 2

48

顺便说一句,我相信您可以将标记的列本身用作表达式:

foobar = Foo.bar.label("foobar")
session.query(foobar).filter(foobar > 10).all()
于 2013-03-22T05:57:22.633 回答
23

只需将 foobar 放在引号中。它会order_by像这样工作:

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

对于过滤器,您可以使用原始 sql 条件:

session.query(Foo.bar.label("foobar")).filter("foobar > 10").all()
于 2013-03-21T20:47:27.060 回答