排查参数化 SQL 查询错误:解决“字符串格式化期间未转换所有参数”
尝试执行参数化 SQL 查询时,开发人员可能会遇到以下问题:遇到错误:“TypeError:并非所有参数在字符串格式化期间都已转换。”当对参数不足或格式不正确的查询使用字符串格式时,通常会出现此问题。
要解决此错误,确保格式化字符串中的每个占位符与查询中的相应参数匹配至关重要。在给定的代码片段中:
cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
查询中的占位符“%s”表示要替换为搜索中的值的参数。但是,execute 方法需要一个包含参数的列表或元组。为了纠正这个问题,可以进行以下修改:
cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
通过将搜索包装在列表中,它成为一个可以解压缩为单个参数的迭代。在 MySQLdb 中执行参数化查询的正确语法要求参数以列表形式传递。
这个简单的调整可确保所有参数在字符串格式化期间正确转换,并消除上述错误。或者,可以使用元组(不可变列表)代替列表来传递参数。
以上是为什么我的参数化 SQL 查询会抛出'字符串格式化期间未转换所有参数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!