#!/usr/bin/env python # -*- coding: utf-8 -*- from flask import current_app from sqlalchemy.exc import SQLAlchemyError from sqlalchemy import text import time def check_db_connection(db): """ Überprüft die Datenbankverbindung und versucht ggf. die Verbindung wiederherzustellen Args: db: SQLAlchemy-Instanz Returns: bool: True, wenn die Verbindung erfolgreich ist, sonst False """ max_retries = 3 retry_count = 0 while retry_count < max_retries: try: # Führe eine einfache Abfrage durch, um die Verbindung zu testen with current_app.app_context(): db.session.execute(text('SELECT 1')) return True except SQLAlchemyError as e: retry_count += 1 print(f"DB-Verbindungsfehler (Versuch {retry_count}/{max_retries}): {str(e)}") if retry_count < max_retries: # Warte vor dem nächsten Versuch time.sleep(1) # Versuche die Verbindung zurückzusetzen try: db.session.rollback() except: pass return False def initialize_db_if_needed(db, initialize_function=None): """ Initialisiert die Datenbank, falls erforderlich Args: db: SQLAlchemy-Instanz initialize_function: Funktion, die aufgerufen wird, um die Datenbank zu initialisieren Returns: bool: True, wenn die Datenbank bereit ist, sonst False """ # Prüfe die Verbindung if not check_db_connection(db): return False # Prüfe, ob die Tabellen existieren try: with current_app.app_context(): # Führe eine Testabfrage auf einer Tabelle durch db.session.execute(text('SELECT COUNT(*) FROM user')) except SQLAlchemyError: # Tabellen existieren nicht, erstelle sie try: with current_app.app_context(): db.create_all() # Rufe die Initialisierungsfunktion auf, falls vorhanden if initialize_function and callable(initialize_function): initialize_function() return True except Exception as e: print(f"Fehler bei DB-Initialisierung: {str(e)}") return False return True