在 Python 2.5中使用 SQLite3,我试图遍历一个列表,并根据项的名称从数据库中提取项的权重。
我试过用“ ?”参数替换建议,以防止 SQL 注入,但它不工作。例如,当我使用:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
我得到了一个错误:
错误: 提供的绑定数不正确。当前语句使用1,提供的绑定数为8。
我相信这是由于最初创建数据库造成的; 实际创建 DB 的模块有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个文件夹。我该怎么补救?