@kanuddel: Deine Connection solltest du mit dem with-Statement öffnen. Dann kannst du dir das Schließen am Ende sparen. Das würde in diesem Fall auch fehlschlagen, wenn aus irgend einem Grund der try-Block beendet wird, bevor con eine gültige Connection zugewiesen wurde. Zum Beispiel, wenn der Server nicht erreichbar ist. In deinem Fall würde es dann zu einer Ausnahme kommen, der Code springt möglicherweise in den except-Blick du würdest den Fehlertext "Daten konnten nicht [...]" ausgeben und anschließend, nach dem Ausnahmeblock, versuchen eine Connection zu schließen, die niemals etabliert wurde. Da kommt es dann zu einer Ausnahme, den con wurde niemals definiert.
Die Fehlermeldung ist auch übrigens falsch. Denn der try-Block umfasst gar nicht das _Eintragen_ der Daten in die Datenbank sondern das Aufbauen der Verbindung zur Datenbank. Das Eintragen hast du extra gekapselt, aber:
Das "Behandeln" des Fehlers bei dem Einfügen des Datensatzes auf diese Weise würde ich mir nochmal sehr genau überlegen.
Exceptions sind dazu da, den aufgetretenen Fehler zu beheben und das Programm in einem stabilen Zustand weiterlaufen zu lassen. Du fängst hier aber alle Fehler, die vom mysql-Connector kommen können und gibst einfach nur eine Fehlermeldung aus. Da dein Programm aber eh nichts weiter tut als den Versuch zu unternehmen, etwas in die Datenbank zu schreiben, kannst du hier auch darauf verzichten. Dann eskaliert der Fehler, das Programm stürzt ab und du bekommst einen ausführlichen Stacktrace.
Es gilt: Entweder einen Fehler sinnvoll behandeln oder die Exception erst gar nicht fangen.
Eingerückt wird immer mit 4 Leerzeichen. Nicht mit mehr, weniger oder Tabs.
Die Einrückungstiefe deutet darauf hin, dass dein Code auf Modulebene steht.
Dort gehört kein Code hin. Auf Modulebene stehen nur Importe; die Definition von Klassen, Funktionen und Konstanten; der Einstieg zur Funktion main.
Warum sind deine Temperaturen Zeichenketten?
Das Ergebnis sieht dann ungetestet in etwa so aus:
Code: Alles auswählen
import mysql
DATABASE_CONFIG = {
"user": "xxx",
"password": "xxx",
"host": "xxx",
"database": "xxx"
}
def main():
with mysql.connector.connect(**DATABASE_CONFIG) as con:
try:
cursor = con.cursor()
query = "INSERT INTO temperaturen (temp1, temp2) VALUES (%s, %s)"
cursor.execute(query, (1, 2))
con.commit()
except mysql.connector.Error as error:
print(f"Oh no, something went wrong.\nIt was: {error}")
print("I don't know what to do, so I raise the exception!")
raise
if __name__ == "__main__":
main()