使用 sqlalchemy 在 python 中使用特定的 where 子句调用 SQL 表值函数时遇到问题。理想情况下还可以指定要调用的列。
目标是将参数传递到函数中并创建一个包含结果表结果的数据框。
代码如下:
from sqlalchemy import create_engine, text, func, null, and_, or_, select
import pandas as pd
query= (select([func.Custom.tfnXXX(213, 107301)])
.where(
and_(func.PXXX > 0,
or_(func.WXXX == '',func.WXXX == None))
)
.apply_labels()
)
engine = create_engine(
'mssql+pyodbc://server/database?trusted_connection=yes&driver=ODBC+Driver+17+for+SQL+Server&ApplicationIntent=ReadOnly')
with engine.connect() as conn:
result = conn.execute(query).fetchall()
df = pd.DataFrame(result, columns=query.c.keys())
尝试遵循 sqlalchemy 文档中的语法,但出现以下错误。不知道如何继续。
ArgumentError: Column expression, FROM clause, or other columns clause element expected, got [<sqlalchemy.sql.functions.Function at 0x1cc2102e700; tfnXXX>]. Did you mean to say select(<sqlalchemy.sql.functions.Function at 0x1cc2102e700; tfnXXX>)?
这在 1.4 或更早版本中曾经有效:
select([func.Custom.tfnXXX(213, 107301)])
在 2.0 中,您只需将列作为参数传递,如下所示(即没有列表):
select(func.Custom.tfnXXX(213, 107301))
您可以在迁移指南中找到有关此更改的更多信息:select-case-now-accept-positional-expressions