【问题标题】:python sqlalchemy label usagepython sqlalchemy标签使用
【发布时间】:2022-04-05 00:17:34
【问题描述】:

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

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

当然,这不起作用,因为没有名为 foobar 的变量。这怎么可能实现?

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

【问题讨论】:

    标签: python sqlalchemy alias


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      只需将 foobar 放在引号中。它适用于order_by,如下所示:

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

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

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

      【讨论】:

      • 把过滤条件放到原始sql中怎么样?我已经更新了答案。希望对您有所帮助。
      • 虽然这可能有效(我还没有尝试过),但我的谓词包括日期,而这些日期不适用于某些数据库中的字符串
      • 这在使用func.sum 时对我有用,而@Eevee 的回答没有。
      • 知道如何根据标签字段更改排序顺序吗?尝试 query = query.order_by("changepct".asc()) 时出现错误
      【解决方案3】:
      # 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"))
      

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 2014-12-03
        • 2014-08-22
        • 2018-01-09
        • 1970-01-01
        • 2020-12-27
        • 2018-12-25
        • 1970-01-01
        • 2021-12-05
        相关资源
        最近更新 更多