使用 SQLite3 和 Python 2.5,我试图遍历一个列表并根据项目的名称从数据库中提取项目的权重。
我尝试使用“?” 建议使用参数替换来防止 SQL 注入,但它不起作用。例如,当我使用:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
我得到错误:
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 8 个。
我相信这在某种程度上是由数据库的初始创建引起的;我制作的实际创建数据库的模块确实有 8 个绑定。
cursor.execute("""CREATE TABLE Equipment
(id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER,
weight REAL,
info TEXT,
ammo_cap INTEGER,
availability_west TEXT,
availability_east TEXT)""")
但是,当我对每个项目名称使用不太安全的“%s”替换时,它工作得很好。像这样:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
self.cursor.close()
我不知道为什么当我只调用一个时它认为我有 8 个绑定。我该如何解决?