Herausfinden, warum eine Datenbankverbindung scheitert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Strawk
User
Beiträge: 47
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: RegBez Köln
Kontaktdaten:

Dienstag 6. Februar 2018, 13:44

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
Benutzeravatar
noisefloor
User
Beiträge: 2368
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Dienstag 6. Februar 2018, 13:49

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
__deets__
User
Beiträge: 2707
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 6. Februar 2018, 13:49

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.
Antworten