ich habe heute ein kleines Skript geschrieben, mit dem man sich auf einem MySQL
Server anmeldet und eine Datenbank öffnet / erstellt.
Es werden hierbei ein paar mögliche, häufige Fehler (bei weitem nicht alle) abgefangen.
Kann dieses Skript so verwendung finden, oder tauchen Gedanklichefehler, Ablauffehler, o. ä. auf?
Die Fehlercodes habe ich von der MySQL Seite entnommen.
Die try und except - Blöcke in den Funktionen (erstelle_datenbank_server_verbindung, erstelle_datenbank, erstelle_dbtabelle)
sind vorerst recht spartanisch, da ich zuerst wissen möchte ob meine vorgehensweise richtig ist.
Code: Alles auswählen
import mysql.connector
from mysql.connector import Error, errorcode
def erstelle_datenbank_verbindung(host_name, user_name, user_passwd, db_name):
"""
Erstellt die Verbindung zum angegeben Datenbankserver mit dem angegebenen
Benuternamen und dem entsprechenden Passwort.
Es wird dabei die angegebene Datenbank geöffnet.
"""
verbindung = None
try:
verbindung = mysql.connector.connect(
host = host_name,
user = user_name,
passwd = user_passwd,
database = db_name
)
print("MySQL Datenbank Verbindung erfolgreich")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_CANT_CREATE_DB:
# error 1006 Kann keine Datenbank erstellen
# was soll man da dann machen?
print(f"Error: '{err}'")
elif err.errno == errorcode.ER_CANT_OPEN_FILE:
# error 1016
# Message: Can't open file: '%s' (errno: %d - %s)
# InnoDB reports this error when the table from the InnoDB
# data files cannot be found.
print(err.errno)
print(f"Kann die angegebene Datenbank {db_name} nicht öffnen.")
elif err.errno == errorcode.ER_FILE_NOT_FOUND:
# error 1017
# Message: Can't find file: '%s' (errno: %d - %s)
print(err.errno)
print(f"Es kann die angegebene Datenbank {db_name} nicht gefunden \
werden.")
elif err.errno == errorcode.ER_ERROR_ON_READ:
# error 1024
# Message: Error reading file '%s' (errno: %d - %s)
print(err.errno)
print(f"Es kann nicht von der angegebenen Datei gelesen werden.")
elif err.errno == errorcode.ER_DBACCESS_DENIED_ERROR:
# error 1044
# Access denied for user '%s'@'%s' to database '%s'
print(err.errno)
print("Login Daten für die angegebene Datenbank sind falsch!")
elif err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
# error 1045
# Message: Access denied for user '%s'@'%s' (using password: %s)
print(err.errno)
print("Benutzername oder Passwort ist falsch.")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
# error 1049
# Message: Unknown database '%s'
print(err.errno)
print(f"Datenbank '{db_name}' existiert nicht.")
verbindung = erstelle_datenbank_server_verbindung(host_name, \
user_name, user_passwd)
erstelle_datenbank(verbindung, db_name)
else:
print(f"Error: '{err}'")
return verbindung
def erstelle_datenbank_server_verbindung(host_name, user_name, user_passwd):
"""
Erstellt nur die Verbindung zum Datenbankserver mit dem angegebenen
Benutzernamen und dem entsprechenden Passwort
"""
verbindung = None
try:
verbindung = mysql.connector.connect(
host = host_name,
user = user_name,
passwd = user_passwd
)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Benutzername oder Passwort ist falsch.")
else:
print(f"Error: '{err}'")
return verbindung
def erstelle_datenbank(verbindung, db_name):
"""
Erstellt auf einem verbunden Datenbankserver eine neue Datenbank
"""
cursor = verbindung.cursor()
try:
cursor.execute(f"""CREATE DATABASE {db_name}""")
print(f"Datenbank {db_name} wurde erfolgreich erstellt")
except mysql.connector.Error as err:
if err.errno == errorcode. ER_DB_CREATE_EXISTS:
# error 1007
# Message: Can't create database '%s'; database exists
print(f"Datenbank {db_name} existiert bereits.")
else:
print(f"Error: '{err}'")
def erstelle_dbtabelle(verbindung, tabelle):
cursor = verbindung.cursor()
try:
cursor.execute(tabelle)
print(f"Erstelle Tabelle {tabelle}: ", end="")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
print("existiert bereits.")
else:
print(f"Error: '{err}'")
else:
print("OK")
cursor = erstelle_datenbank_verbindung("localhost", "root", "passwort", "tabellenname")
bsp_tabelle = """CREATE TABLE pausen (
Vorname VARCHAR(30) NOT NULL,
Nachname VARCHAR(30) NOT NULL
);
"""
erstelle_dbtabelle(cursor, bsp_tabelle)