pyodbc准备好的语句中的列表参数

问题描述 投票:1回答:1

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

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生成一个(?, ?, <...>, ?)吗?我自己还是我可以以某种方式将列表/集合插入到准备好的语句的单个字段中。

python sql sql-server prepared-statement pyodbc
1个回答
0
投票

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

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

这里的关键是,如果?占位符的数量与您要绑定的列表的大小匹配,则可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.