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

Python中将列表转换为SQL IN条件可用的逗号分隔值的方法

把Python列表转成SQL WHERE IN可用格式的几种实用方法

嘿,刚学Python碰到这个需求太正常啦!我给你整理了几个靠谱的实现方式,还会重点说下避免SQL注入的安全写法——毕竟直接拼字符串在实际项目里风险不小,可不能大意。

方法1:基础字符串拼接(适合简单测试场景)

如果你的列表元素已经是字符串类型的数字(就像你的例子X = ['1', '2','3']),直接用str.join()就能快速搞定:

X = ['1', '2', '3']
xVals = ','.join(X)  # 结果是 '1,2,3'
sql = '''SELECT * from [dbo].[customer] where c_id in (%s)''' % xVals

要是你的ID是带字符的字符串(比如['A001', 'B002', 'C003']),记得给每个元素加单引号,避免SQL语法错误:

xVals = ','.join(f"'{item}'" for item in X)  # 结果是 "'A001','B002','C003'"

⚠️ 注意:这种方法绝对不能用来处理用户输入的内容,很容易引发SQL注入攻击,只适合固定的、完全可信的列表数据。

方法2:参数化查询(推荐!安全又规范)

在正式项目里,强烈推荐用数据库连接库的参数化查询功能——它会自动处理SQL注入风险,还能帮你搞定不同数据类型的格式转换,是工业界的标准做法。

以常用的pyodbc库为例(其他库比如psycopg2、sqlite3逻辑类似):

X = ['1', '2', '3']
# 根据列表长度生成对应数量的占位符(pyodbc用?作为占位符)
placeholders = ','.join('?' * len(X))
# 构建SQL语句
sql = f'''SELECT * from [dbo].[customer] where c_id in ({placeholders})'''
# 执行查询时把列表作为参数传入
cursor.execute(sql, X)

这样既不用手动拼接字符串,又能彻底规避注入风险,省心又安全。

方法3:用格式化字符串辅助拼接(和方法1逻辑一致)

如果你习惯用str.format()写法,也可以这么实现,本质还是依赖join:

X = ['1', '2', '3']
sql = '''SELECT * from [dbo].[customer] where c_id in ({})'''.format(','.join(X))

效果和方法1完全相同,同样要注意SQL注入的问题,只适合非用户输入的场景。

总结一下:测试或固定数据用方法1/3足够;正式项目一定要用方法2的参数化查询,安全永远是第一位的!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:40:22