import os from dotenv import load_dotenv from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # Ensure environment variables from backend/.env or root .env.local are loaded immediately BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) load_dotenv(os.path.join(BASE_DIR, ".env")) load_dotenv(os.path.join(os.path.dirname(BASE_DIR), ".env.local")) DATABASE_URL = os.getenv("DATABASE_URL", "") # Neon requires ssl; SQLAlchemy 2.0 style engine = create_engine( DATABASE_URL or "sqlite:///:memory:", pool_pre_ping=True if DATABASE_URL else False, pool_size=5 if DATABASE_URL else 1, max_overflow=10 if DATABASE_URL else 0, connect_args={"sslmode": "require"} if "neon.tech" in DATABASE_URL else {}, ) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() def get_db(): db = SessionLocal() try: yield db finally: db.close()