Frage

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

Ergibt dies...

sqlite3.ProgrammingError:Falsche Anzahl der gelieferten Bindungen.Die aktuelle Anweisung verwendet 1 und es werden 54 angegeben.

Ich war wirklich verwirrt darüber, was die 54 bereitgestellten Bindungen sind, bis mir klar wurde, dass meine Pfadvariable 54 Zeichen umfasst.Aber warum interpretiert SQLite es als eine lange Liste von Zeichen und nicht als Zeichenfolge, und wie kann ich das verhindern?

War es hilfreich?

Lösung

Das zweite Argument zu execute ist ein Reihenfolge.

Sie schrieben (path), aber das sind nur normale Klammern, also ist das äquivalent zu path.Zeichenfolgen sind Folgen ihrer Zeichen, daher gibt Python alle 54 Zeichen in der von Ihnen angegebenen Reihenfolge pflichtbewusst weiter.

Was Sie wollen, ist (path,), was ein Tupel aus 1 Element ist.

Tupel werden mit Kommas erstellt, nicht Klammern.

Wenn das verwirrend ist, können Sie es einfach verwenden [path];Eine Liste ist auch hier in Ordnung.:) :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top