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

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

Mary-Kate Olsen
发布: 2024-10-19 15:30:03
原创
264 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板