it-swarm.com.de

sqlite3.ProgrammingError: Falsche Anzahl der gelieferten Bindungen. Die aktuelle Anweisung verwendet 1, und es werden 74 geliefert

def insert(array):
    connection=sqlite3.connect('images.db')
    cursor=connection.cursor()
    cnt=0
    while cnt != len(array):
            img = array[cnt]
            print(array[cnt])
            cursor.execute('INSERT INTO images VALUES(?)', (img))
            cnt+= 1
    connection.commit()
    connection.close()

Ich kann nicht herausfinden, warum das den Fehler gibt. Die Zeichenfolge, die ich versuche, ist 74 Zeichen lang. Es ist: -ire-pressureures-low.gif "

Ich habe versucht, str (array [cnt]) vor dem Einfügen auszuführen, aber dasselbe Problem tritt auf, die Datenbank hat nur eine Spalte, die einen TEXT-Wert darstellt.

Ich bin schon seit Stunden dabei und kann nicht herausfinden, was los ist.

118
AB49K

Sie müssen eine Sequenz übergeben, haben jedoch das Komma vergessen, um Ihre Parameter zu einem Tuple zu machen:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

Ohne das Komma ist (img) nur ein gruppierter Ausdruck, kein Tuple, und daher wird die Zeichenfolge img als Eingabesequenz behandelt. Wenn diese Zeichenfolge 74 Zeichen lang ist, sieht Python, dass 74 separate Bindungswerte mit jeweils einem Zeichen lang sind.

>>> len(img)
74
>>> len((img,))
1

Wenn Sie das Lesen einfacher finden, können Sie auch ein Listenliteral verwenden:

cursor.execute('INSERT INTO images VALUES(?)', [img])
268
Martijn Pieters
cursor.execute(sql,array)

Nur zwei Argumente.
Es wird das "Array" -Objekt iterieren und übereinstimmen? in der SQL-Zeichenfolge.
(mit Vernunftsprüfungen zur Vermeidung von SQL-Injektionen)

0
Punnerud