diff --git a/src/seer/db.py b/src/seer/db.py index a6155822f..4dd375213 100644 --- a/src/seer/db.py +++ b/src/seer/db.py @@ -1,9 +1,11 @@ import contextlib import datetime import json +import logging from enum import StrEnum from typing import Any, List, Optional + import sqlalchemy from flask import Flask from flask_migrate import Migrate @@ -35,20 +37,32 @@ from seer.configuration import AppConfig from seer.dependency_injection import inject, injected +logger = logging.getLogger(__name__) +_db_initialized = False @inject def initialize_database( config: AppConfig = injected, app: Flask = injected, ): + global _db_initialized + + if _db_initialized and hasattr(app, 'extensions') and 'sqlalchemy' in app.extensions: + logger.debug("SQLAlchemy already initialized for this Flask app instance") + return + + logger.debug("Initializing SQLAlchemy for Flask app") app.config["SQLALCHEMY_DATABASE_URI"] = config.DATABASE_URL app.config["SQLALCHEMY_ENGINE_OPTIONS"] = {"connect_args": {"prepare_threshold": None}} + db.init_app(app) migrate.init_app(app, db) + with app.app_context(): Session.configure(bind=db.engine) + _db_initialized = True class Base(DeclarativeBase):