【问题标题】:How do I add numbers in a ORM query in SQLAlchemy?如何在 SQLAlchemy 的 ORM 查询中添加数字?
【发布时间】:2021-09-05 17:36:16
【问题描述】:

我正在尝试使用 SQLAlchemy ORM 触发 DATEDIFF 查询,我需要在 DATEDIFF 的输出中添加一个变量

ORM:

query = session.query(func.datediff(text("ss"), some_date, another_date) + 1000).all()

所需的 SQL:

SELECT DATEDIFF(SS, some_date, another_date) + 1000 FROM Table

执行上述 ORM 查询将 SQL 输出为

 SELECT DATEDIFF(SS, some_date, another_date) || '' AS anon_1 FROM Table

并抛出 ProgrammingError "Implicit conversion from datatype 'VARCHAR' to 'INT' not allowed. Use the CONVERT function to run this query"

我曾尝试将label()func.datediff() 一起使用,但没有产生预期的结果。我怎样才能使这个查询工作?

【问题讨论】:

  • 你可以为Table添加你的模型或DDL吗?
  • 还有some_dateanother_date是什么?他们没有向我表明“数字”,您可能希望修改您的标题以表明所需的数据类型。
  • 它们是日期时间对象。例如,如果 datediff 的结果是 1000 秒,我正在尝试选择 2000 作为值。

标签: python database sqlalchemy pyodbc


【解决方案1】:

SQLAlchemy 假定 func.datediff 返回 aString。您需要指定类型:

func.datediff(text("ss"), some_date, another_date, type_=Integer) + 1000

或强制使用+ 运算符:

func.datediff(text("ss"), some_date, another_date).op('+')(1000)

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 2015-04-13
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2019-05-18
    相关资源
    最近更新 更多