【发布时间】:2022-04-05 00:17:34
【问题描述】:
我知道我可以对别名使用标签方法,但我不知道如何在查询的后面使用标签元素 - 如下所示:
session.query(Foo.bar.label("foobar")).filter(foobar > 10).all()
当然,这不起作用,因为没有名为 foobar 的变量。这怎么可能实现?
(过于简化的例子只是为了便于理解......)
【问题讨论】:
标签: python sqlalchemy alias
我知道我可以对别名使用标签方法,但我不知道如何在查询的后面使用标签元素 - 如下所示:
session.query(Foo.bar.label("foobar")).filter(foobar > 10).all()
当然,这不起作用,因为没有名为 foobar 的变量。这怎么可能实现?
(过于简化的例子只是为了便于理解......)
【问题讨论】:
标签: python sqlalchemy alias
顺便说一句,我相信您可以将标签列本身用作表达式:
foobar = Foo.bar.label("foobar")
session.query(foobar).filter(foobar > 10).all()
【讨论】:
只需将 foobar 放在引号中。它适用于order_by,如下所示:
session.query(Foo.bar.label("foobar")).order_by('foobar').all()
对于过滤器,您可以使用原始 sql 条件:
session.query(Foo.bar.label("foobar")).filter("foobar > 10").all()
【讨论】:
func.sum 时对我有用,而@Eevee 的回答没有。
query = query.order_by("changepct".asc()) 时出现错误
# When you use the SQLAlchemy Core interface you may apply text()
from sqlalchemy import text
stmt = select(Foo.c.bar.label("foobar"))
stmt = stmt.where(text("foobar > 10"))
【讨论】: