You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用DataFrame字段作为IN参数查询Teradata数据库报错如何解决

问题原因
  • 占位符语法不兼容:Teradata ODBC驱动不支持%(params)s这类Python风格的命名参数占位符,仅支持?作为位置占位符,你代码里的%符号被驱动识别为非法SQL字符,直接触发报错。
  • IN子句参数处理错误:IN条件对应多个参数值时,需要为每个值单独设置占位符,不能直接把列表/元组当成单个参数传入。
修复方案
import teradata
import pandas as pd

# 生成参数列表
params = dfm['cust'].astype(str).to_list()
# 提前校验参数非空,避免生成IN ()的非法SQL
if not params:
    raise ValueError("过滤参数cust无有效取值")
# 构造IN子句的占位符:有多少个参数就生成多少个?,用逗号分隔
in_placeholders = ', '.join(['?'] * len(params))

# 初始化连接
udaExec = teradata.UdaExec(appName="test", version="1.0", logConsole=False)

with udaExec.connect(method="ODBC", system=host, username=uid,
                     password=pwd, driver="Teradata Database ODBC Driver 16.20", authentication="LDAP") as connect:
    # 拼接SQL语句
    query = f"SELECT Cust, Flag FROM DBName.Tablename where Cust in ({in_placeholders})"
    # 执行查询,按位置传递参数即可
    df = pd.read_sql(query, connect, params=params)

内容的提问来源于stack exchange,提问作者user2162611

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:48:01