| """SQLAlchemy engine, session factory, and FastAPI dependency.""" |
|
|
| import os |
|
|
| from sqlalchemy import create_engine |
| from sqlalchemy.orm import sessionmaker, Session |
|
|
| DATABASE_URL = os.getenv( |
| "DATABASE_URL", |
| "postgresql://postgres:postgres@localhost:5432/emojinize", |
| ) |
|
|
| engine = create_engine(DATABASE_URL) |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
|
|
|
|
| def get_db() -> Session: |
| """ |
| Yield a database session for a single request, then close it. |
| |
| FastAPI injects this as a dependency via Depends(get_db). |
| The session is always closed even if the handler raises an exception. |
| |
| Yields: |
| An active SQLAlchemy Session bound to the configured DATABASE_URL. |
| """ |
| db = SessionLocal() |
| try: |
| yield db |
| finally: |
| db.close() |
|
|