TypeError: 参数化 SQL 查询中字符串格式化期间并非所有参数都已转换
遇到错误“TypeError: 字符串格式化期间并非所有参数都已转换” " 在参数化 SQL 查询中使用字符串时是一个常见问题。
代码示例提供:
cur.execute("SELECT * FROM records WHERE email LIKE '%s'", search)
尝试使用搜索参数的占位符 (%s) 格式化的字符串执行查询。但是,此方法是不正确的。
要解决此错误,执行参数化查询的正确方法是以列表形式提供占位符值:
cur.execute("SELECT * FROM records WHERE email LIKE %s", [search])
在这种情况下,[ search] 是包含单个搜索参数的列表。 MySQLdb(和其他类似的数据库库)期望对值列表进行转换和格式化。直接传递单个值会导致错误。
其背后的原因是参数化查询可以在 SQL 语句中包含多个占位符,每个占位符代表不同的值。通过以列表的形式提供值,数据库库可以迭代该列表并适当地转换每个值。
因此,在参数化 SQL 查询中使用占位符时,必须以列表或元组的形式提供值。这可确保所有参数都正确转换和格式化,防止出现“并非所有参数都已转换”错误。
以上是为什么我的参数化 SQL 查询会抛出'TypeError:未转换所有参数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!