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 ?

Était-ce utile?

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.:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top