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