MSSQL查询日期添加的SQLAlchemy等价物(天,1,GETDATE())

2024-06-17 06:00:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我在这里阅读了文档:https://docs.sqlalchemy.org/en/13/core/tutorial.html#functions。然后,我尝试了一些东西,包括Python datetime,但作为SQLAlchemy初学者,我似乎仍然缺少一些东西

MSSQL代码:

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

SQLAlchemy代码:

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.ProgrammingError) ('42000', '[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The day function requires 1 argument(s). (174) (SQLExecDirectW);

这个错误是可以理解的,因为我需要找到与MicrosoftSQL查询中定义的“day”对应的SQLAlchemy

任何指点都将不胜感激

谢谢


Tags: 代码refidsqlsqlalchemytablewherenum
1条回答
网友
1楼 · 发布于 2024-06-17 06:00:10

I need to find SQLAlchemy equivalent for "day" as defined in Microsoft SQL query

您可以使用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())

相关问题 更多 >