Probleme mit Datenbank-Kommando

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Hallo!

Ich habe eine MySQL-Datenbank und möchte Werte in die DB schreiben:

Code: Alles auswählen

# Init TabNames
TabName = "Tabelle1"
Spalte1 = "Spalte1"
Spalte2 = "Spalte2"
Das Kommando funktioniert:

Code: Alles auswählen

Cursor.execute ("""INSERT INTO Tabelle1 (Spalte1, Spalte2) VALUES (%s, %s) """, (Wert1, Wert2) )
db.commit ()
Diese Variante funktioniert nicht - aber ich verstehe nicht, warum:

Code: Alles auswählen

Cursor.execute ("""INSERT INTO %s (%s, %s) VALUES (%s, %s) """, (TabName, Spalte1, Spalte2, Wert1, Wert2) )
db.commit ()
Falls mir jemand einen Tipp geben kann, wo das Problem bei der zweiten Variante liegen könnte, dass dort die ersten drei Variablen nicht akzeptiert werden, würde ich mich sehr drüber freuen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gan einfach: Die Platzhalter-Semantik des DB 2.0 API erlaubt nur Platzhalter für Attribute und nicht für Tabellennamen ;-)

Wenn Du Die Tabelle wirklich dynamisch angeben willst, musst Du für diese Angabe mit herkömmlichen String-Manipulationen (``.format`` o.ä.) arbeiten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

Vielen Dank für Deine Antwort. Dann brauch ich nicht stundenlang herumprobieren, warum es nicht klappt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Papp Nase hat geschrieben:Dann brauch ich nicht stundenlang herumprobieren, warum es nicht klappt.
Naja, Die Fehlermeldung sollte ja auch aussagekräftig sein, oder? Zudem sollte das Verhalten dokumentiert sein! ;-)

Du solltest Dir aber die Frage stellen, *wieso* die Tabelle variabel sein muss. IdR. steht diese bei Kommandos ja fest.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten