À l'aide de SQLite3 avec Python 2.5, je suis en train de parcourir une liste et tirez le poids d'un article de la base de données basé sur le nom de l'élément.
J'ai essayé d'utiliser le "?" paramètre de substitution proposé pour empêcher les injections SQL, mais ça ne fonctionne pas. Par exemple, lorsque j'utilise:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
J'obtiens l'erreur:
sqlite3.ProgrammingError: nombre Incorrect de fixations fournies. L'instruction en cours utilise 1, et il y a 8 fournies.
Je crois que c'est en quelque sorte causé par la création initiale de la base de données; le module que j'ai faite qui crée réellement le DB n'avons 8 liaisons.
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)""")
Cependant, lorsque j'utilise le moins sûr "%s" de substitution pour chaque nom d'élément, il fonctionne très bien. Comme suit:
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
self.cursor.close()
Je ne peux pas comprendre pourquoi il pense que j'ai 8 bindins quand je suis le seul à en appeler un. Comment puis-je résoudre ce problème?