HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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()