列出 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)
这里的关键点是,如果 ?
占位符的数量与您尝试绑定的列表的大小相匹配,那么它就可以工作。
我正在尝试使用以下模式创建准备好的语句:
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)
这里的关键点是,如果 ?
占位符的数量与您尝试绑定的列表的大小相匹配,那么它就可以工作。