我正在尝试使用以下模式创建准备好的语句:
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生成一个(?, ?, <...>, ?)
吗?我自己还是我可以以某种方式将列表/集合插入到准备好的语句的单个字段中。
您正在尝试将列表/集合/集合绑定到只能接收单个标量值的?
占位符。这里的一个选项是根据列表的长度构建动态的WHERE key IN (?,?,?)
子句:
values = [value1, value2, value3, ...]
query = '(?' + ', ?' * (len(values) - 1) + ')'
sql = 'SELECT * FROM table WHERE key IN ' + query
cursor.execute(sql)
这里的关键是,如果?
占位符的数量与您要绑定的列表的大小匹配,则可以使用。