.close() ergibt Fehler

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
ChristophS
User
Beiträge: 37
Registriert: Montag 7. August 2017, 12:52

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
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
ChristophS
User
Beiträge: 37
Registriert: Montag 7. August 2017, 12:52

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
Antworten