File: //opt/af/src/database/connection.py
import os
import mysql.connector
from mysql.connector import errorcode
from dotenv import load_dotenv
import logging
# Lade Umgebungsvariablen aus .env
load_dotenv()
# Logging konfigurieren
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def get_mysql_connection():
"""
Stellt eine Verbindung zur MySQL-Datenbank her und gibt die Verbindung zurück.
Liest die Verbindungsparameter aus Umgebungsvariablen.
Returns:
mysql.connector.connection.MySQLConnection oder None: Das Verbindungsobjekt
oder None bei einem Fehler.
"""
try:
conn = mysql.connector.connect(
host=os.getenv("MYSQL_HOST"),
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
database=os.getenv("MYSQL_DATABASE"),
port=int(os.getenv("MYSQL_PORT", 3306)) # Standardport 3306
)
logging.info("MySQL-Verbindung erfolgreich hergestellt.")
return conn
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
logging.error("Zugriff verweigert. Überprüfe Benutzername/Passwort.")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
logging.error(f"Datenbank '{os.getenv('MYSQL_DATABASE')}' existiert nicht.")
else:
logging.error(f"MySQL-Verbindungsfehler: {err}")
return None
except Exception as e:
logging.error(f"Ein unerwarteter Fehler ist aufgetreten: {e}")
return None
def test_mysql_connection():
"""
Testet die MySQL-Verbindung und gibt den Status zurück.
"""
conn = get_mysql_connection()
if conn and conn.is_connected():
logging.info("MySQL-Verbindungstest erfolgreich.")
conn.close()
return True
else:
logging.error("MySQL-Verbindungstest fehlgeschlagen.")
return False
# Beispielhafte Verwendung (kann für Tests aktiviert werden)
# if __name__ == '__main__':
# test_mysql_connection()