from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker, declarative_base from sqlalchemy import event from sqlalchemy.engine import Engine from configs import get_settings import os #DB_URL = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./app.db") DB_URL= get_settings().DATABASE_URL if DB_URL.startswith("postgresql://"): DB_URL = DB_URL.replace("postgresql://", "postgresql+asyncpg://", 1) #engine = create_async_engine(DB_URL, echo=True, future=True) engine = create_async_engine( DB_URL, echo=True, future=True, connect_args={"ssl": "require", "statement_cache_size": 0, } ) AsyncSessionLocal = sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False ) Base = declarative_base() async def get_db(): async with AsyncSessionLocal() as session: yield session if DB_URL.startswith("sqlite"): @event.listens_for(engine.sync_engine, "connect") def enable_sqlite_fk(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.close()