MySQL Timestamp-Problem

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich will folgenden Befehl ausführen:

UPDATE `temp` SET `UnixTimestamp` = UNIX_TIMESTAMP(STR_TO_DATE(`Datum`,'%d.%c.%Y %H:%i:%s'))

Wenn ich diesen so in phpmyadmin eingebe, macht er das,wandelt also die Spalte Datum in einen Unix Timestamp.

Wenn ich nun aber mittels:

Code: Alles auswählen

dat = "Datum"
sql = "UPDATE `temp` SET `UnixTimestamp` = UNIX_TIMESTAMP(STR_TO_DATE(`" + dat + "`,'%d.%c.%Y %H:%i:%s'));"
oder aber

Code: Alles auswählen

dat = "Datum"
sql = """UPDATE `temp` SET `UnixTimestamp` = UNIX_TIMESTAMP(STR_TO_DATE(`" %s "`,'%d.%c.%Y %H:%i:%s'));""" % dat

den Befehl mit Python ausführen will, bekomm ich einen
mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'U' at line 1")

Weiss jemand, an was das liegt?
Wie gesagt, wenn ich die Zeile mit print sql in der KOnsole ausgeben lasse und direkt in meine MySQL-Konsole kopiere, funktioniert es.
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich habe den Fehler gefunden: Ich habe mir die Variable dat im Vorfeld von einer PyQt-Eingabemaske übergeben lassen, und das sind in dem Fall QStrings

Folglich einfach:

Code: Alles auswählen

str(dat)
und die Sache war erledigt.

Wieso sind es immer diese kleinen Sachen, auf die man nicht kommt?!
:roll:
lunar

  • Man baut SQL-Ausdrücke nicht mittels Konkatenation oder Format-Ausdrücken zusammen, sondern nutzt dafür parametrisierte Ausdrücke.
  • Man sollte der Datenbank Unicode-Zeichenketten übergeben und keine Bytes, damit sowohl beim Speichern als auch beim Lesen korrekt enkodiert und dekodiert werden kann.
  • Python hat native Datumstypen, die bei parametrisierten Ausdrücken automatisch in den entsprechenden Typen der Datenbank umgesetzt werden.
  • Qt hat eigene Möglichkeiten zum Datenbankzugriff, die sich weitaus besser in eine GUI einfügen als die DB-API Schnittstellen von Python
Antworten