Seite 1 von 1

.close() ergibt Fehler

Verfasst: Donnerstag 26. August 2021, 20:38
von ChristophS
Ich habe folgendes Problem:

command ist ein String mit dem Inhalt: SELECT * FROM <table>

Code: Alles auswählen

def my_sql_exec(con, command):

    try:
        db = mysql.connector.connect(host="localhost", user=con[0], password=con[1])
        cur = db.cursor()
        cur.execute('USE temptrol')
        cur.execute(command)
        result = cur.fetchall()
        db.close()
        print(result())

    except:
        print('an Error in my_sql_exec occured')
gibt mir den except print.
Prompte ich den close()-Befehl weg, läuft es. Verwende ich close() falsch?
Herzlichen Dank für alle Infos.

Christoph

Re: .close() ergibt Fehler

Verfasst: Donnerstag 26. August 2021, 21:23
von rogerb
@ChristophS,

dadurch, dass du alle Exceptions still abfängst, bekommst du auch keine hilfreiche Fehlermeldung.
Erst wenn man weiß was schiefgehen könnte, und auch weiß wie man darauf reagieren möchte, macht ein Exceptionhandling Sinn.

Außerdem führst du kein close() auf dem cursor aus. Der sollte vor der connection geschlossen werden.
Ansonsten können noch viele andere Dinge schief gehen (Passwort falsch, User falsch, SQL query falsch, und und und.

Also würde ich den try - except block zunächst weg lassen um die eigentliche Fehlermeldung zu bekommen.
Dann den Fehler beheben und für zukünftige Fälle ein Excpetionhandling mit dem genauen Exception-Typ einbauen.

Re: .close() ergibt Fehler

Verfasst: Donnerstag 26. August 2021, 21:43
von __blackjack__
Das wird immer eine Ausnahme auslösen weil `result` sicherlich nicht aufrufbar ist. Was man halt auch sehen würde wenn die kaputte Ausnahmebehandlung nicht wäre.

Gelöst Re: .close() ergibt Fehler

Verfasst: Freitag 27. August 2021, 15:38
von ChristophS
Danke Euch Beiden

result stand in der falschen Zeile; manchmal hat man ein Brett vor dem Kopf.
Wie man mySql richtig abschliesst habe ich trotz verschiedener Entchen Frage nirgends schlüssig gefunden; danke für den Hinweis.
Ich gebe zu, dass ich die Handhabung von try-exept-finally nicht wirklich beherrsche. Da habe etwas nachzuholen :oops:

Danke nochmals

Christoph