Spaces:
Sleeping
Sleeping
| 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() | |