import os from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.orm import DeclarativeBase DATABASE_URL = os.getenv( "DATABASE_URL", "postgresql+asyncpg://kitchen:kitchen_secret@localhost:5432/kitchen_gp" ) # Convert standard postgres URL to asyncpg format if DATABASE_URL.startswith("postgresql://"): DATABASE_URL = DATABASE_URL.replace("postgresql://", "postgresql+asyncpg://", 1) engine = create_async_engine( DATABASE_URL, echo=False, pool_size=int(os.getenv("DB_POOL_SIZE", "10")), max_overflow=int(os.getenv("DB_MAX_OVERFLOW", "20")), pool_pre_ping=True, ) AsyncSessionLocal = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) class Base(DeclarativeBase): pass async def get_db(): async with AsyncSessionLocal() as session: try: yield session finally: await session.close()