Files
python-api/app/db/mariadb.py
2026-03-01 07:44:19 +09:00

43 lines
994 B
Python

from __future__ import annotations
from collections.abc import AsyncGenerator
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
from sqlmodel import SQLModel
from app.core.config import settings
async_engine = create_async_engine(
settings.MARIADB_DSN,
echo=settings.DEBUG,
pool_pre_ping=True,
pool_size=10,
max_overflow=20,
)
AsyncSessionLocal = sessionmaker(
bind=async_engine,
class_=AsyncSession,
expire_on_commit=False,
)
async def init_mariadb() -> None:
async with async_engine.begin() as conn:
await conn.run_sync(SQLModel.metadata.create_all)
async def close_mariadb() -> None:
await async_engine.dispose()
async def get_db() -> AsyncGenerator[AsyncSession, None]:
async with AsyncSessionLocal() as session:
try:
yield session
await session.commit()
except Exception:
await session.rollback()
raise