SQLite3 Python 'Incorrect number of bindings supplied. The current statement uses 1, ... supplied' beheben

English Deutsch

Problem:

Du versuchst, eine einfache SQL-Abfrage mit Platzhaltern auf einer SQLite3-Datenbank auszuführen, z.B.:

sqlite_incorrect_bindings_fix.py
name = "mytable"
conn.execute("SELECT sql FROM sqlite_master WHERE name=?;", name)

Aber du erhältst eine Exception wie diese:

sqlite3_bindings_error.txt
---------------------------------------------------------------------------
ProgrammingError                          Traceback (most recent call last)
<ipython-input-55-e385cf40fd72> in <module>
      1 name = "mytable"
----> 2 conn.execute("SELECT sql FROM sqlite_master WHERE type='table' AND name=?;", name)

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied.

Lösung

Du musst eine Liste als zweites Argument an conn.execute(...) übergeben!

Da du der Funktion nur einen String übergeben hast, wird der String als Liste von Zeichen interpretiert.

In unserem Beispiel oben musst du einfach name in eckige Klammern setzen, um [name] zu lesen:

sqlite3_bindings_fix.py
name = "mytable"
conn.execute("SELECT sql FROM sqlite_master WHERE name=?;", [name])

Check out similar posts by category: Python, SQLite