首页  >  文章  >  后端开发  >  在 Python 中使用 SQLite3 时,为什么在使用“?”参数替换时出现“提供的绑定数量不正确”?

在 Python 中使用 SQLite3 时,为什么在使用“?”参数替换时出现“提供的绑定数量不正确”?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-19 15:30:03152浏览

When Using SQLite3 in Python, Why

SQLite 参数替换难题

为了防止 SQL 注入,开发人员在将 SQLite3 与 Python 2.5 结合使用时遇到错误。当采用推荐的“?”时参数替换以防止注入,他们面临以下困境:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.

这个问题似乎源于数据库的初始创建,其中包含八个绑定。然而,使用不太安全的“%s”替换每个项目名称解决了这个问题。

for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
    self.cursor.close()

解决这个困惑的方法在于理解 Cursor.execute() 方法需要一个序列作为它的第二个范围。在本例中,开发人员提供的字符串恰好有八个字符长。为了纠正这个问题,应该实现以下代码修改:

self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])

通过遵循此参数规范,可以有效解决该问题,从而可以安全高效地从 SQLite3 检索数据。

以上是在 Python 中使用 SQLite3 时,为什么在使用“?”参数替换时出现“提供的绑定数量不正确”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn