Sage100-vps/database/db_config.py

56 lines
1.5 KiB
Python

import os
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy.pool import StaticPool
from database.models import Base
import logging
logger = logging.getLogger(__name__)
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./data/sage_dataven.db")
engine = create_async_engine(
DATABASE_URL,
echo=False,
future=True,
connect_args={"check_same_thread": False},
poolclass=StaticPool,
)
async_session_factory = async_sessionmaker(
engine,
class_=AsyncSession,
expire_on_commit=False,
autoflush=False,
)
async def init_db():
"""
Crée toutes les tables dans la base de données
⚠️ Utilise create_all qui ne crée QUE les tables manquantes
"""
try:
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
logger.info("✅ Base de données initialisée avec succès")
logger.info(f"📍 Fichier DB: {DATABASE_URL}")
except Exception as e:
logger.error(f"❌ Erreur initialisation DB: {e}")
raise
async def get_session() -> AsyncSession:
"""Dependency FastAPI pour obtenir une session DB"""
async with async_session_factory() as session:
try:
yield session
finally:
await session.close()
async def close_db():
"""Ferme proprement toutes les connexions"""
await engine.dispose()
logger.info("🔌 Connexions DB fermées")