QuizFrog/backend/app/database.py

34 lines
1004 B
Python

from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy import event
from app.config import settings
engine_kwargs = {}
if "sqlite" in settings.DATABASE_URL:
engine_kwargs["connect_args"] = {"check_same_thread": False}
engine = create_async_engine(settings.DATABASE_URL, echo=False, **engine_kwargs)
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
class Base(DeclarativeBase):
pass
# Enable foreign keys for SQLite
if "sqlite" in settings.DATABASE_URL:
@event.listens_for(engine.sync_engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
async def get_db() -> AsyncSession:
async with async_session() as session:
try:
yield session
finally:
await session.close()