2016-10-04 6 views
0

ich habe:sqlite3 Update-Datenbank mit "?" - Python

Datenbank testing.db3 Tabelle: Mytable Spalten: 'name', 'Status'

ich tun:

con = sqlite3.connect('testing.db3') 
cur = con.cursor() 
cur.execute('select * from mytable where status is null') 

data = cur.fetchone() 
print(data[0]) 

als wollte ich erhalten folgendes Ergebnis:

('Johnny', 'None') 

Jetzt versuche ich, diese Zeile zu aktualisieren, es funktioniert, wenn ich tun:

cur.execute('UPDATE mytable SET status = "Online" WHERE name is "Johnny"') 

Wenn ich es jedoch mit '?' Aktualisieren will, funktioniert es einfach nicht. Irgendeine Idee warum?

cur.execute('UPDATE mytable SET status = "Online" WHERE name is ?', data[0]) 
con.commit() 
con.close() 

Würde mich über jede Hilfe freuen. Vielen Dank.

+0

Was ist die Fehlermeldung? Liegt es daran, dass Sie zwei Parameter einfügen, aber das 'execute' erwartet nur eins? – imant

+0

"sqlite3.ProgrammingError: Falsche Anzahl der gelieferten Bindungen." Ich habe Daten [0] ausgewählt, was der erste Wert von Tupel ist. –

+0

Sie meinen, dass 'data [0]' den Wert "Johnny" hat? Korrigiere mich, wenn ich mich irre. – imant

Antwort

2
cur.execute('UPDATE mytable SET status = "Online" WHERE name is ?', (data[0],)) 

execute erwartet ein Tupel als Eingabeparameter. Selbst wenn Sie nur einen einzigen Wert einfügen, sollten Sie es daher als Tupel formatieren.

Obwohl Sie in Ihrer Frage sagen, dass data[0] = ('Johnny', 'None'), in den Kommentaren Sie angeben, dass data[0] ist der erste Wert des Tupels. Ich nehme also an, dass letzteres der Fall ist.

+0

Ja das ist richtig. Vielen Dank. –