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

如何在Python的SQL查询中传递变量参数及使用DataFrame作为参数

解决SQL查询中使用变量和DataFrame作为WHERE条件参数的问题

一、使用变量x作为IN条件的参数

你的原代码问题在于,多数数据库驱动不支持用单个?占位符对应IN条件里的多个值。需要根据变量的长度动态生成对应数量的占位符:

x = ('610094437','4738521095','4738671217')
cur = conn.cursor()
# 生成与x长度匹配的占位符,比如3个值就生成"?, ?, ?"
placeholders = ', '.join(['?'] * len(x))
sql = f"select QUOTE_OBJECT_ID,OPTY_NUMBER from dmadm.cq_ccw_all_deal Where QUOTE_OBJECT_ID in ({placeholders})"
# 直接传入x作为参数元组
cur.execute(sql, x)
row = cur.fetchall()
print(row)

这样每个值都会被正确绑定到对应的占位符,同时避免SQL注入风险。

二、使用DataFrame作为WHERE条件的参数

可以先从DataFrame中提取需要的列值,转换成元组/列表后,再用上面的方法处理:

import pandas as pd

# 示例DataFrame,假设包含需要匹配的QUOTE_OBJECT_ID列
df = pd.DataFrame({'QUOTE_OBJECT_ID': ['610094437','4738521095','4738671217']})
cur = conn.cursor()

# 提取列值并转为元组
target_values = tuple(df['QUOTE_OBJECT_ID'].tolist())
# 生成占位符
placeholders = ', '.join(['?'] * len(target_values))
sql = f"select QUOTE_OBJECT_ID,OPTY_NUMBER from dmadm.cq_ccw_all_deal Where QUOTE_OBJECT_ID in ({placeholders})"
# 执行查询
cur.execute(sql, target_values)
# 可选:将结果转为DataFrame
result_df = pd.DataFrame(cur.fetchall(), columns=['QUOTE_OBJECT_ID', 'OPTY_NUMBER'])
print(result_df)

注意事项

  • 确保DataFrame中的值类型与数据库字段类型一致,比如字符串类型要和数据库的字符字段匹配,避免类型错误。
  • 如果DataFrame中有空值,提前过滤掉,避免查询出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:09:25