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=10, # Default is 5 max_overflow=20, # Default is 10 - allows burst to 30 connections pool_pre_ping=True # Verify connections are alive before use ) 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()