Spaces:
Sleeping
Sleeping
| # ============================================== | |
| # db.py | |
| # ============================================== | |
| import os | |
| from pathlib import Path | |
| from sqlalchemy import create_engine, inspect | |
| from sqlalchemy.orm import sessionmaker, declarative_base | |
| # ---------------------------------------------- | |
| # 1. κ²½λ‘ λ° DB μ€μ | |
| # ---------------------------------------------- | |
| BASE_DIR = Path(__file__).resolve().parent | |
| DATA_DIR = BASE_DIR / "data" | |
| DATA_DIR.mkdir(parents=True, exist_ok=True) | |
| DB_PATH = DATA_DIR / "questions.db" | |
| DATABASE_URL = f"sqlite:///{DB_PATH.as_posix()}" | |
| # ---------------------------------------------- | |
| # 2. SQLAlchemy Engine μμ± | |
| # ---------------------------------------------- | |
| # check_same_thread=False: SQLiteλ₯Ό λ©ν° μ€λ λ νκ²½(FastAPI λ±)μμ μΈ λ νμ | |
| engine = create_engine( | |
| DATABASE_URL, | |
| connect_args={"check_same_thread": False}, | |
| echo=False, # SQL λ‘κ·Έκ° νμνλ©΄ Trueλ‘ λ³κ²½ | |
| future=True | |
| ) | |
| # ---------------------------------------------- | |
| # 3. Session μ€μ | |
| # ---------------------------------------------- | |
| SessionLocal = sessionmaker( | |
| autocommit=False, | |
| autoflush=False, | |
| bind=engine | |
| ) | |
| # ---------------------------------------------- | |
| # 4. Base λͺ¨λΈ (ORM κ³΅ν΅ λΆλͺ¨) | |
| # ---------------------------------------------- | |
| Base = declarative_base() | |
| # ---------------------------------------------- | |
| # 5. DB μ΄κΈ°ν ν¨μ (ν μ΄λΈ μμ± λ° νμΈ) | |
| # ---------------------------------------------- | |
| def init_db(): | |
| # λͺ¨λΈλ€μ μ¬κΈ°μ import ν΄μΌ Base.metadataμ λ±λ‘λ¨ | |
| # (μν μ°Έμ‘° λ°©μ§λ₯Ό μν΄ ν¨μ λ΄λΆ import κΆμ₯) | |
| from models import Question, Attempt | |
| # ν μ΄λΈ μμ± (μ΄λ―Έ μμΌλ©΄ 무μν¨) | |
| Base.metadata.create_all(bind=engine) | |
| print(f"\n[INFO] β Database Connected: {DB_PATH}") | |
| print("ββββββββββββββββββββββββββββββββββββββββββββββ") | |
| # μμ±λ ν μ΄λΈ ꡬ쑰 νμΈ (λλ²κΉ μ©) | |
| inspector = inspect(engine) | |
| table_names = inspector.get_table_names() | |
| if not table_names: | |
| print("β οΈ No tables found. Did you define classes in models.py?") | |
| for table in table_names: | |
| print(f"π Table: {table}") | |
| for col in inspector.get_columns(table): | |
| # 컬λΌλͺ , νμ μΆλ ₯ | |
| print(f" β’ {col['name']:<15} {str(col['type'])}") | |
| print("ββββββββββββββββββββββββββββββββββββββββββββββ\n") | |
| # ---------------------------------------------- | |
| # 6. Dependency (FastAPI λ±μμ μ¬μ©) | |
| # ---------------------------------------------- | |
| def get_db(): | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() |