Используя 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 связок, когда я только звоню. Как я могу это исправить?