列出 pyodbc 准备语句中的参数

List parameter in pyodbc prepared statement

我正在尝试使用以下模式创建准备好的语句:

SELECT * FROM table WHERE key IN (value1, value2, value3, ..., valueN)

使用 pyodbc 我尝试了以下语法:

values = set(...)
cursor.execute('SELECT * FROM table WHERE key IN (?)', values)

错误:

The SQL contains <N> paramter markers, but 1 parameters were supplied

我必须为 N 生成 (?, ?, <...>, ?) 吗?我自己或者我能否以某种方式将 list/set 插入到准备好的语句的单个字段中。

您正在尝试将 list/set/collection 绑定到只能接收单个标量值的 ? 占位符。这里的一种选择是根据列表的长度构建动态 WHERE key IN (?,?,?) 子句:

values = [value1, value2, value3, ...]
query = '(?' + ', ?' * (len(values) - 1) + ')'
sql = 'SELECT * FROM table WHERE key IN ' + query
cursor.execute(sql)

这里的关键点是,如果 ? 占位符的数量与您尝试绑定的列表的大小相匹配,那么它就可以工作。