Seite 1 von 1

Herausfinden, warum eine Datenbankverbindung scheitert

Verfasst: Dienstag 6. Februar 2018, 13:44
von Strawk
Hallo!

Hier ein einfaches Datenbankzugriffsskript:

Code: Alles auswählen

def zugriff():
    # global connection
    # Connector importieren
    import mysql.connector

    # Verbindung zum Datenbankserver erstellen
    try:
        connection = mysql.connector.connect \
        (host = "localhost", user = "root", passwd = "", db = "firma")
    except:
        print("Keine Verbindung zum Server")
        # sys.exit(0)
    
    return connection
Wie muss es erweitert werden, damit man Infos bekommt zu den Details einer gescheiterten Datenbankverbindung?

In PHP sieht das z.B. so aus:

[codebox=php file=Unbenannt.php]if ($mysqli->connect_error)
{
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}[/code]

Grüße
Strawk
:D

Re: Herausfinden, warum eine Datenbankverbindung scheitert

Verfasst: Dienstag 6. Februar 2018, 13:49
von noisefloor
Hallo,

ganz einfach: entfern' das try...except und du siehtst die Fehlermeldung.

Nackte try..except sind so wie so gaaaanz schlecht, weil du damit _alle_ Fehler abfängst, auch Programmierfehler etc. Fehler fängt man gezielt ab.

BTW: das `import` Statement gehört an den Anfang, nicht in die Funktion. Du musst nicht bei jedem Funktionsaufruf importieren.

Gruß, noisefloor

Re: Herausfinden, warum eine Datenbankverbindung scheitert

Verfasst: Dienstag 6. Februar 2018, 13:49
von __deets__
Bitte *nicht* lokale Importe verwenden. Ja, das geht, aber man macht es nicht weil man dadurch keine Uebersicht darueber hat, was fuer Abhaengigkeiten ein Modul hat. Ausnahmen sind selten. Also bitte an den Anfang damit.

Und statt "bare" excepts, die alles einfach wegfangen, inklusive deiner eigenen Fehler wie zB falsch geschriebener Namen, faengt man die konkrete Fehlermeldung. Zb

Code: Alles auswählen

try:
    #tuwas
except IOError as e:
    print(e) # und hier hast du dann auch den Grund
IOError ist jetzt mein Beispiel, schau in die Dokumentation von mysqldb welche du erwarten musst, oder lass es einfach mal ohne try/except krachen und schau dir an, wie die Ausnahme heisst.