UPDATE MYSQL Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
vandewey
User
Beiträge: 4
Registriert: Donnerstag 9. Mai 2013, 16:54

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?
BlackJack

@vandewey: `commit()` vergessen‽
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

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))
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.
vandewey
User
Beiträge: 4
Registriert: Donnerstag 9. Mai 2013, 16:54

Danke Leute für die raschen Antworten - conn.commit() fehlte.
Antworten