我的语句应该与语法匹配,但出现了错误 "Not all parameters were used in the SQL statement") mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement
```
stmt = "UPDATE abbcards SET carPlate = '%(values)s' WHERE carId =%(id)s"
params = [tuple(cusSurname.values()), tuple(cusSurname.keys())]
cur.executemany(stmt, params)
怎么了?我已经定义了 `operation` 以及 `seq_params` 变量。
1条答案
按热度按时间tvokkenx1#
@他们的评论有些道理。您正在查询字符串中使用命名占位符(
%(values)s
以及%(id)s
),因此必须以dict的形式传递参数。但是,你也会打电话
executemany
它需要一个参数列表或元组。很多次,executemany
除了打电话什么也不做execute
多次迭代params
,在每次迭代中传递一个参数元素。也就是说,每个元素params
必须包含查询的完整参数集。查看查询字符串时,需要替换两个参数。
从您的代码示例中,可以假设
cusSurname
是一个dict。假设它看起来像这样:在上面的代码中,您所做的是将cussurname的所有键和值传递给
executemany
.这将导致最终的查询字符串:
... 第一个参数元组中的一个元素没有被替换,这导致
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement
,在第二条语句可以由字符串和参数组成之前,如下所示:... 提出同样的例外。你要做的是,最终得到一个由你的单子组成的dict列表/元组
cusSurname
:或切换到位置参数: