| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import sessionmaker | |
| from backend.config import DB_URL | |
| engine = create_engine(DB_URL, connect_args={"check_same_thread": False}) | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| def get_db(): | |
| """ | |
| Dependency for FastAPI routes: yields a SQLAlchemy session. | |
| Usage: add as a dependency in route functions. | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |
| from contextlib import contextmanager | |
| def session_scope(): | |
| """ | |
| Context manager for non-FastAPI scripts: | |
| with session_scope() as db: | |
| ... | |
| Commits on success, rolls back on exception. | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| db.commit() | |
| except Exception: | |
| db.rollback() | |
| raise | |
| finally: | |
| db.close() | |