Seite 1 von 1

UPDATE MYSQL Datenbank

Verfasst: Sonntag 12. Mai 2013, 14:11
von vandewey
Hallo,

Ich versuche seit einiger Zeit den Inhalt einer Spalte einer Tabelle in meiner Datenbank zu ändern.
Zugriff und Auslesen funktioniert, auch die Syntax des Codes fürs Updaten dürfte passen - jedoch
ändert sich nichts in der DB.....

Ich möchte nur die Variable E1 in die Spalte EIN1 schreiben, mit der Bedingung id=1

Code: Alles auswählen

E1=1
cursor.execute("""
        UPDATE EIN
        SET EIN1=%s
        WHERE id=1
""",(E1))
Hätte jemand einen Tipp?

Re: UPDATE MYSQL Datenbank

Verfasst: Sonntag 12. Mai 2013, 14:18
von BlackJack
@vandewey: `commit()` vergessen‽

Re: UPDATE MYSQL Datenbank

Verfasst: Sonntag 12. Mai 2013, 14:21
von Sirius3
ich bezweifle mal, dass einfach nichts passiert. Die Syntax des SQL-Befehls ist falsch und das zweite Argument hat den falschen Typ. Also muss zumindest eine Exception geworfen werden. Warum Du keine siehst, mußt Du an anderer Stelle im Code suchen (wahrscheinlich irgendwo ein nacktes »except«).

Richtig:

Code: Alles auswählen

E1=1
cursor.execute("""
        UPDATE EIN
        SET EIN1=?
        WHERE id=1
""",(E1,))
richtiger:

Code: Alles auswählen

ein1=1
cursor.execute("""
        UPDATE EIN
        SET EIN1=?
        WHERE id=?
""",(ein1, 1))

Re: UPDATE MYSQL Datenbank

Verfasst: Sonntag 12. Mai 2013, 14:30
von BlackJack
@Sirius: Als SQL wäre die Syntax falsch aber leider haben sich die Python-Entwickler bei den Platzhaltern auf mehrere Varianten geeignet und eine DB API 2 kompatible Implementierung muss ? nicht unterstützen. Was es leider schwierig macht wiederverwendbaren Code für verschiedene DBs zu schreiben. Man muss sich an *der* Stelle schon selbst eine Abstraktionsschicht basteln, oder etwas vorhandenes über der DB API 2.0 verwenden, wenn man unabhängig von der DB sein möchte. :-(

Mit ein Grund warum ich auch für SQL ohne ORM SqlAlchemy empfehlen würde.

Re: UPDATE MYSQL Datenbank

Verfasst: Sonntag 12. Mai 2013, 14:59
von vandewey
Danke Leute für die raschen Antworten - conn.commit() fehlte.