SQLalchemy - 从 mssql 调用特定表值函数

问题描述 投票:0回答:1

使用 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>)?
python sqlalchemy
1个回答
0
投票

这在 1.4 或更早版本中曾经有效:

select([func.Custom.tfnXXX(213, 107301)])

在 2.0 中,您只需将列作为参数传递,如下所示(即没有列表):

select(func.Custom.tfnXXX(213, 107301))

您可以在迁移指南中找到有关此更改的更多信息:select-case-now-accept-positional-expressions

© www.soinside.com 2019 - 2024. All rights reserved.