Seite 1 von 1

sqlite und update - Syntaxfrage

Verfasst: Dienstag 25. September 2007, 18:47
von Oscar
Hi,
ich habe mir als Python-Einsteiger eine Adressdatenbank erstellt. Orientiert habe ich mich
dabei an einem Grundlagenbeitrag von Moderator Gerold.
http://www.python-forum.de/topic-11615. ... ht=adresse
Das klappt auch so weit ganz gut. Nun versuche ich vorhandene Datensätze mit update
zu modifizieren, was aber nicht funktioniert. Mein Versuch:

Code: Alles auswählen

cur.execute("UPDATE adressen set aendern = neuwert WHERE name = person")
Die Werte von "aendern", "neuwert" und "person" sollen über Benutzereingaben kommen.
Die entsprechenden Werte hole ich mir mit der raw_input() Funktion.
Ansatzweise habe ich schon verstanden, das solche Änderungen über Tupel realisiert werden
sollen, aber praktisch habe ich noch nicht kapiert, wie das syntaktisch gemacht wird ... :(
Gruß Oscar

Re: sqlite und update - Syntaxfrage

Verfasst: Dienstag 25. September 2007, 20:10
von gerold
Oscar hat geschrieben:

Code: Alles auswählen

cur.execute("UPDATE adressen set aendern = neuwert WHERE name = person")
Die Werte von "aendern", "neuwert" und "person" sollen über Benutzereingaben kommen.
Hallo Oscar!

Willkommen im Python-Forum!

Du kannst über den von dir angesprochenen Tupel *nur* *Werte* ersetzen lassen. Den Feldnamen musst du selber ändern.

Code: Alles auswählen

feldname = "aendere_mich"
sql = "UPDATE adressen set %s = ? WHERE name = ?" % feldname
Das Ersetzen der Werte überlässt du dann wieder der SQLite-Schnittstelle.

Code: Alles auswählen

cur.execute(sql, ("neuwert", "person"))
Achte aber unbedingt darauf, dass "feldname" nicht vom Benutzer direkt eingegeben werden kann. Eine Auswahl der Feldnamen ist OK, aber dass der Benutzer einfach irgend einen Text als Feldnamen angeben kann, dass musst du verhindern. Ansonsten könnte der Benutzer eventuell in die SQL-Anweisung seine *eigene* SQL-Anweisung einschleusen. Das wird von der SQL-Schnittstelle mit dem *Tupel* in cur.execute bereits automatisch für "neuwert" und "person" verhindert. Du musst dich nur noch um "feldname" kümmern.

mfg
Gerold
:-)

sqlite und update - Syntaxfrage

Verfasst: Mittwoch 26. September 2007, 15:59
von Oscar
Hallo Gerold,
schönen Dank für Deine Hinweise. Nach einer kleinen Anpassung (neuwert, person ohne
Anführungszeichen) hat es funktioniert. Dank auch für die dem Code folgenden Erläuterungen.
Darüber habe ich mir bisher noch keine Gedanken gemacht, aber ich stehe ja auch erst am Anfang.
Gruß Oscar