SQLAlchemy 等效于 MSSQL 查询 DATEADD(day, -1, GETDATE()).



我有非常简单Microsoft SQL查询,我正在尝试将其转换为SQLAlchemy。

我在这里阅读了文档:https://docs.sqlalchemy.org/en/13/core/tutorial.html#functions。然后,我尝试了包括Python日期时间在内的几件事,但似乎我仍然缺少一些SQLAlchemy初学者。

MSSQL 代码:

SELECT flight_ID FROM
flight_table
WHERE FlightStartTime < DATEADD(day, -1, GETDATE())

SQL炼金代码:

from sqlalchemy import func

table_ref = flight_table # Used reflection
num_day = -1
stmt = select([table_ref.c.flight_ID])
where_column = flight_table.columns.FlightStartTime

stmt = stmt.where(
where_column < func.dateadd(func.day(), num_day,
func.getdate())
)
with self.engine.connect() as conn:
output = conn.execute(stmt).fetchall()

我得到的错误如下:

sqlalchemy.exc.ProgrammingError: (pyodbc.编程错误( ('42000', '[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL 服务器]day 函数需要 1 个参数。(174) (SQLExecDirectW(;

该错误是可以理解的,因为我需要找到SQL查询中定义的"天"的SQLAlchemy等效项Microsoft。

任何指示将不胜感激。

谢谢。

我需要找到SQL查询中定义的"天"的SQLAlchemy等效项Microsoft

可以使用 SQLAlchemytext函数创建将在查询表达式中使用的文本:

import sqlalchemy as sa
# ... set up your engine by calling `sa.create_engine` ...
flight_table = sa.Table("flight_table", sa.MetaData(), autoload_with=engine)
num_days = -1
stmt = sa.select([flight_table.c.flight_ID]).where(
flight_table.c.FlightStartTime
< sa.func.dateadd(sa.text("day"), num_days, sa.func.getdate())
)
with engine.connect() as conn:
result = conn.execute(stmt).fetchall()
print(result)

生成的 SQL 命令文本是

SELECT flight_table.[flight_ID] 
FROM flight_table 
WHERE flight_table.[FlightStartTime] < dateadd(day, ?, getdate())

最新更新