如何在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
相关产品推荐
相关产品推荐

