Spaces:
Paused
Paused
| """ | |
| SQLAlchemy 2.0 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง/์ธ์ ์ค์ . | |
| ๋๊ธฐ ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑํ๋ฉฐ, FastAPI ์์กด์ฑ ์ฃผ์ (get_db)์ ์ ๊ณตํ๋ค. | |
| ๊ธฐ๋ณธ๊ฐ์ ๋ก์ปฌ ๋จ์ผ ์ฌ์ฉ์ MVP์ ๋ง์ถฐ GovOn ํ ๋๋ ํฐ๋ฆฌ ์๋ SQLite ํ์ผ์ ์ฌ์ฉํ๋ค. | |
| """ | |
| import logging | |
| import os | |
| from pathlib import Path | |
| from typing import Generator | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import Session, sessionmaker | |
| logger = logging.getLogger(__name__) | |
| # --------------------------------------------------------------------------- | |
| # ์์ง & ์ธ์ ํฉํ ๋ฆฌ | |
| # --------------------------------------------------------------------------- | |
| _DEFAULT_GOVON_HOME = Path(os.getenv("GOVON_HOME", Path.home() / ".govon")) | |
| _DEFAULT_DATABASE_URL = f"sqlite:///{_DEFAULT_GOVON_HOME / 'metadata.sqlite3'}" | |
| DATABASE_URL: str = os.getenv("DATABASE_URL", _DEFAULT_DATABASE_URL) | |
| if DATABASE_URL == _DEFAULT_DATABASE_URL: | |
| logger.warning( | |
| "DATABASE_URL ํ๊ฒฝ๋ณ์๊ฐ ์ค์ ๋์ง ์์ ๋ก์ปฌ SQLite ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. " | |
| "๋ณ๋ RDBMS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด DATABASE_URL์ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ธ์." | |
| ) | |
| engine_kwargs = { | |
| "echo": os.getenv("SQL_ECHO", "").lower() in ("1", "true"), | |
| } | |
| if DATABASE_URL.startswith("sqlite:///"): | |
| _DEFAULT_GOVON_HOME.mkdir(parents=True, exist_ok=True) | |
| engine_kwargs["connect_args"] = {"check_same_thread": False} | |
| else: | |
| engine_kwargs.update( | |
| { | |
| "pool_size": 10, | |
| "max_overflow": 20, | |
| "pool_pre_ping": True, | |
| "pool_recycle": 3600, | |
| } | |
| ) | |
| engine = create_engine(DATABASE_URL, **engine_kwargs) | |
| SessionLocal = sessionmaker( | |
| bind=engine, | |
| autocommit=False, | |
| autoflush=False, | |
| ) | |
| # --------------------------------------------------------------------------- | |
| # FastAPI ์์กด์ฑ ์ฃผ์ | |
| # --------------------------------------------------------------------------- | |
| def get_db() -> Generator[Session, None, None]: | |
| """FastAPI Depends()์ฉ ์ธ์ ์ ๋๋ ์ดํฐ. | |
| ์ฌ์ฉ ์์:: | |
| @router.get("/docs") | |
| def list_docs(db: Session = Depends(get_db)): | |
| ... | |
| """ | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.rollback() | |
| db.close() | |