Spaces:
Sleeping
Sleeping
File size: 2,857 Bytes
8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb 8f0fa74 08348fb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# ==============================================
# 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() |