os.path.join et sqlite ne fonctionnent pas bien ensemble
Question
Python 2.7 (Windows)
for root, dirs, files in os.walk(self.DiskLocation, topdown=False):
for name in files:
path = os.path.join(root, name)
print path #check it's what we think it is
self.cur.execute("SELECT * from myTable WHERE Path = ?", (path))
Donne ceci...
sqlite3.ProgrammingError :Nombre incorrect de fixations fournies.L'instruction actuelle en utilise 1 et 54 sont fournis.
J'étais vraiment confus quant à ce que sont les 54 liaisons fournies, jusqu'à ce que je réalise que ma variable de chemin comporte 54 caractères.Mais pourquoi sqlite l'interprète-t-il comme une longue liste de caractères plutôt que comme une chaîne, et comment puis-je l'empêcher de le faire ?
La solution
Le deuxième argument à execute
est un séquence.
Tu as écrit (path)
, mais ce ne sont que des parenthèses régulières, donc cela équivaut à path
.Les chaînes sont des séquences de leurs caractères, donc Python transmet consciencieusement les 54 caractères dans la séquence que vous avez fournie.
Ce que tu veux c'est (path,)
, qui est un tuple de 1 élément.
Les tuples sont créés avec des virgules, pas parenthèses.
Si cela prête à confusion, vous pouvez simplement utiliser [path]
;une liste convient ici aussi.:)