【发布时间】:2017-02-21 18:25:51
【问题描述】:
我正在尝试在 python 3.6 中将未知数量的参数传递给 SQL Server。这是我使用 pypyodbc 的代码:
cursor = cnxn.cursor()
theargs= ['1033286869','1053474957','1063654630','1104116235','1104910306','JASON']
thesql = """SELECT *
FROM BI_DUPLICATES_STAGE_0
WHERE DUP_ID IN (?, ?, ?, ?, ?)
AND FRST_NM = ?
"""
cursor.execute(thesql, theargs)
resultset = cursor.fetchall()
这行得通。但是,我永远不确定我将拥有多少个 DUP_ID。我见过一些使用列表的例子,但是如果我有另一个变量,例如这种情况,FRST_NM,那么我不能只使用列表。
因此,如果有人可以提供一个简单的示例,说明有一个列表(不同长度)和另一个变量以及如何让 SQL 运行,我将不胜感激!如果这是问题所在,我不一定要使用 pypyodbc,而且还有另一种方法可以做到这一点。
更新:
感谢您提供格式精美的答案。只是一个快速的后续问题。如果我必须产生类似的东西,我仍然有点不清楚如何格式化 2 个列表:
SELECT * FROM BI_DUPLICATES_STAGE_0
WHERE DUP_ID IN (1033286869, 1053474957, 1063654630, 1104116235, 1104910306)
AND MID_NM IN ('SMITH','JON')
AND FRST_NM = 'JASON'
如果没有好的格式加入,我会遇到这样的混乱:
SELECT * FROM BI_DUPLICATES_STAGE_0
WHERE DUP_ID IN (?,?,?,?,?)
AND MID_NM IN (?,?)
AND FRST_NM = ?
如何按照建议将列表格式化两次?请记住,我不知道每个列表(ID 和 MID_NM)的实际长度。
【问题讨论】:
-
我遇到了一些这样的问题...为什么那个查询是一团糟?这是参数化查询的准备语句。
标签: python sql sql-server pypyodbc