我有一个非常简单的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] [SQL Server的ODBC驱动程序13] [SQL Server] day函数需要1个参数。(174)(SQLExecDirectW );
该错误是可以理解的,因为我需要找到Microsoft SQL查询中定义的等效于“ day”的SQLAlchemy。
任何指针将不胜感激。
谢谢。
我需要找到与Microsoft SQL查询中定义的“天”等效的SQLAlchemy
您可以使用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())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句