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.
Benutzeravatar
Strawk
User
Beiträge: 45
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: RegBez Köln
Kontaktdaten:

Herausfinden, warum eine Datenbankverbindung scheitert

Beitragvon Strawk » Dienstag 6. Februar 2018, 13:44

Hallo!

Hier ein einfaches Datenbankzugriffsskript:
  1. def zugriff():
  2.     # global connection
  3.     # Connector importieren
  4.     import mysql.connector
  5.  
  6.     # Verbindung zum Datenbankserver erstellen
  7.     try:
  8.         connection = mysql.connector.connect \
  9.         (host = "localhost", user = "root", passwd = "", db = "firma")
  10.     except:
  11.         print("Keine Verbindung zum Server")
  12.         # sys.exit(0)
  13.    
  14.     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:

  1. if ($mysqli->connect_error)
  2.     {
  3.         die('Connect Error (' . $mysqli->connect_errno . ') '
  4.         . $mysqli->connect_error);
  5.     }


Grüße
Strawk
:D
Benutzeravatar
noisefloor
User
Beiträge: 2233
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Herausfinden, warum eine Datenbankverbindung scheitert

Beitragvon noisefloor » 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
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Herausfinden, warum eine Datenbankverbindung scheitert

Beitragvon __deets__ » 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

  1. try:
  2.     #tuwas
  3. except IOError as e:
  4.     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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder