Scr*_*lex 5 python sql sql-server prepared-statement pyodbc
我正在尝试使用以下模式创建一个准备好的语句:
SELECT * FROM table WHERE key IN (value1, value2, value3, ..., valueN)
Run Code Online (Sandbox Code Playgroud)
使用 pyodbc 我尝试了以下语法:
values = set(...)
cursor.execute('SELECT * FROM table WHERE key IN (?)', values)
Run Code Online (Sandbox Code Playgroud)
错误:
The SQL contains <N> paramter markers, but 1 parameters were supplied
Run Code Online (Sandbox Code Playgroud)
我必须(?, ?, <...>, ?)为 N 生成 a 吗?我自己或者我可以以某种方式将列表/集合插入到准备好的语句的单个字段中。
您正在尝试将列表/集合/集合绑定到?只能接收单个标量值的占位符。WHERE key IN (?,?,?)这里的一种选择是根据列表的长度构建动态子句:
values = [value1, value2, value3, ...]
query = '(?' + ', ?' * (len(values) - 1) + ')'
sql = 'SELECT * FROM table WHERE key IN ' + query
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)
这里的关键点是,如果?占位符的数量与您尝试绑定的列表的大小匹配,那么它就可以工作。
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |