db_connection.py

Code Hygiene Score: 100

Keine Issues gefunden.

Dependencies 4

Klassen 1

Code

"""Database Connection Pool"""

from contextlib import contextmanager

import mysql.connector
from mysql.connector import pooling

from config import Config


class DatabaseConnection:
    """Singleton Connection Pool - SRP: Nur Verbindungsmanagement"""

    _pool = None

    @classmethod
    def get_pool(cls):
        """Erstellt oder gibt existierenden Connection Pool zurueck"""
        if cls._pool is None:
            cls._pool = pooling.MySQLConnectionPool(
                pool_name="mcp_pool",
                pool_size=5,
                host=Config.DB_HOST,
                user=Config.DB_USER,
                password=Config.DB_PASSWORD,
                charset="utf8mb4",
                connection_timeout=10,
                autocommit=True,
            )
        return cls._pool

    @classmethod
    @contextmanager
    def get_connection(cls, database: str):
        """
        Context Manager fuer DB Connection.

        Args:
            database: Datenbankname (bereits validiert)
        """
        conn = cls.get_pool().get_connection()
        try:
            # Datenbank wechseln (USE statement statt property)
            cursor = conn.cursor()
            cursor.execute(f"USE {database}")

            # Query Timeout setzen (MariaDB verwendet max_statement_time in Sekunden)
            try:
                cursor.execute(
                    f"SET SESSION max_statement_time = {Config.QUERY_TIMEOUT_SEC}"
                )
            except Exception:
                pass  # Falls Variable nicht unterstuetzt wird
            cursor.close()

            yield conn
        finally:
            conn.close()
← Übersicht Graph