2016-09-30 6 views
-2

Ich muss dieses Programm erhalten, um die Werte für den Vor- und Nachnamen einer Person in einer Datenbank zu speichern. Die Datenbank heißt Class und die Tabelle darin, in die ich Daten einfügen möchte, heißt Names. Ich habe versucht, dies mehrmals neu anzuordnen und es aus seiner Testschleife zu entfernen, um das Problem zu diagnostizieren. Danke im Voraus. Ich werde die beste Hilfe ichSQLite-Python "Executemany()" führt nicht zur Datenbank

new_first,new_surname = str(input("Firstname:\t")), str(input("Surname:\t")) 
new_name = [new_surname, new_first] 
print(new_name) 
c.executemany("INSERT INTO Names VALUES (?,?)", new_name) 

Die Fehlermeldung, die ich halten kann :) bekommen ist: Falsche Anzahl von Bindungen geliefert. Die aktuelle Anweisung verwendet 2 und es werden 7 bereitgestellt.

+2

Warum Sie verwenden 'executemany()'? Das ist zu verwenden, wenn Sie die gleiche SQL-Anweisung für mehrere Parametersätze ausführen möchten, aber Sie haben * nur einen *. –

+0

OFCOURSE !!! Ich weiß eigentlich nicht, warum ich es als Executemany behalten habe. VIELEN DANK! – Ddude

Antwort

1

Verwenden cursor.executemany() nicht, verwenden cursor.execute():

c.execute("INSERT INTO Names VALUES (?,?)", new_name) 

executemany() sollte für mehrere Reihen von Daten verwendet werden, , aber du hast nur einen.

Der Fehler wird durch die executemany()-Methode verursacht, die new_surname als eine Zeile behandelt, und da eine Zeichenfolge iterable ist, wird versucht, jedes einzelne Zeichen aus dieser Zeichenfolge als einen Parameter zu verwenden. Eine String-Länge von 7 würde Ihnen 7 Parameter geben, und das stimmt nicht mit den 2 in der SQL-Anweisung überein.

Wenn Sie viele Zeilen zu tun haben, dann würde jede Zeile haben für die beiden Parameter eines und Vor- und Zuname Wert bestehen:

new_names = [ 
    [new_surname, new_first], 
    ['another surname', 'another first name'], 
    # ... 
] 
c.executemany("INSERT INTO Names VALUES (?,?)", new_names) 
1

executemany() erwartet viele Artikel, wie der Name schon sagt.

Das bedeutet eine Liste von Listen oder eine ähnliche Datenstruktur. Du gibst es nur einen Gegenstand.

new_first, new_surname = str(input("Firstname:\t")), str(input("Surname:\t")) 
new_name = [[new_surname, new_first]] 

c.executemany("INSERT INTO Names VALUES (?,?)", new_name) 

oder execute verwenden, wenn Sie nur ein Element haben

new_first, new_surname = str(input("Firstname:\t")), str(input("Surname:\t")) 
new_name = [new_surname, new_first] 

c.execute("INSERT INTO Names VALUES (?,?)", new_name)