【问题标题】:Add own literal string as additional field in result of query - SQLAlchemy在查询结果中添加自己的文字字符串作为附加字段 - SQLAlchemy
【发布时间】:2018-06-05 03:43:52
【问题描述】:

如何在 SQLAlchemy ORM 中模拟以下原始 sql?

SELECT "http://example.com/page/"||table.pagename as pageUrl

需要从表中获取值,使用 ORM/Python 进行修改(这里只是一个字符串连接),并将 SQLAlchemy 查询的结果作为附加字段输出。

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    SQLAlchemy 字符串类型具有运算符重载,允许您像在这种情况下处理 Python 字符串一样对待它们(字符串连接),但会生成 SQL 表达式:

    session.query(
            Table,
            ("http://example.com/page/" + Table.pagename).label("pageUrl"))
    

    您可以在此处阅读有关 SQLAlchemy 运算符范例的更多信息:http://docs.sqlalchemy.org/en/latest/core/tutorial.html#operators

    【讨论】:

    • 连接只能通过带有 args 字符串类型的 '+' 起作用。但不是通过 Python 3.6 的 '%' 或 f 字符串。
    • 自然地,因为除了从 f 字符串生成字符串之外别无他法,如果可能的话,一般来说重载字符串格式有点毫无意义,因为几乎不可能以与方言无关的方式提供支持。
    【解决方案2】:

    这个可以通过select做,但是几乎没有ORM:

    from sqlalchemy.sql import select, text
    q = select([text('"http://example.com/page/"||pagename as pageUrl')]).select_from(Table)
    session.execute(q).fetchall()
    

    结果将是RowProxy 类中的对象列表。

    对我来说,通过session.query(上面的答案)解决似乎更方便。它很短,并且可以轻松转换为 dict 的 result 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-02
      • 2014-02-07
      • 2021-02-19
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多