将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个bindin。我该如何解决?