Datensätze ändern/ergänzen: UPDATE
Falls in einem Datensatz eine Änderung ansteht oder einzelne Angaben eines Datensatzes ergänzt werden müssen gibt es die SQL-Anweisung UPDATE
.
Wir wollen unseren Datensatz von Herrn Schiller korrigieren. Schiller ist zwar primär mit dem Vornamen Friedrich bekannt, aber seine kompletten Vornamen lauten: „Johann Christoph Friedrich“
Also wollen wir unseren Datensatz aktualisieren. Schauen wir uns dazu erst die komplette SQL-Anweisung an:
UPDATE personen SET vorname='Johann Christoph Friedrich' WHERE nachname='Schiller'
Die Anweisung UPDATE
ist logisch: Aktualisiere (update) in der Tabelle „personen“ folgende angegebene Daten. Bei den angegebenen Daten müssen wir nur die zu änderten Daten und das entsprechende Feld über die SQL-Anweisung SET
angeben.
Nicht alles Datensätze ändern: Datensatz auswählen
Wir grenzen unsere Datensätze über die zusätzliche SQL-Anweisung WHERE
ein. Hier können wir festlegen, dass unsere Aktion nur für die Datensätze mit der in der WHERE
-Bedingung formulierten Einschränkung durchgeführt wird.
In unserem Fall wollen wir unseren Herrn Schiller auswählen, also WHERE nachname='Schiller'
. Auf das Problem, dass es mehr als einen „Schiller“ in unserer Tabelle gibt, kommen wir später noch zu sprechen.
Bauen wir unsere SQL-Anweisung um, damit wir wie gewohnt mit Variablen arbeiten können und geschützt vor SQL-Injektionen sind.
nachname = "Schiller"
vorname = "Johann Christoph Friedrich"
zeiger.execute("UPDATE personen SET vorname=? WHERE nachname=?", (vorname, nachname))
verbindung.commit()
Noch einmal, da es so wichtig ist! Hier ist die korrekte formulierte Bedingung in der SQL-Anweisung mit WHERE
extrem wichtig. Ansonsten bekommen ALLE Datensätze den neuen Vornamen. Und das würde Goethe definitiv nicht gefallen.
Nach Ausführung der Anweisung haben wir als Ergebnis:
[('Johann Christoph Friedrich', 'Schiller', '10.11.1759')]
[('Johann Christoph Friedrich', 'Schiller', '10.11.1759'), ('Johann Wolfgang von', 'Goethe', '28.8.1749'), ('Johann Wolfgang von', 'Goethe', '28.8.1749')]
Und einfach, weil es so schön ist, einmal diesen fatalen Fehler zu machen, lassen wir die WHERE-Anweisung weg:
zeiger.execute("UPDATE personen SET vorname=? ", (vorname, ))
verbindung.commit()
Anmerkung: das Komma nach (vorname, )
ist wichtig. Dazu später mehr.
Einfach einmal probieren, was dabei rauskommt!