From 1f4215e5e4457b1dac6a565e0d1b1bc35437ae10 Mon Sep 17 00:00:00 2001 From: huangzhuang_3rd Date: Wed, 12 Aug 2026 13:30:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20AI=20Worker=20=E5=B9=B3=E5=8F=B0=20MVP?= =?UTF-8?q?=20v1.0.0=20-=20=E5=A4=9A=E7=A7=9F=E6=88=B7/=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=AE=A1=E7=90=86/AI=20Worker/=E4=BB=BB=E5=8A=A1=E7=BC=96?= =?UTF-8?q?=E6=8E=92/HITL=E5=AE=A1=E6=A0=B8/=E6=88=90=E6=9C=AC=E6=B2=BB?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/database.py | 42 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 backend/app/database.py diff --git a/backend/app/database.py b/backend/app/database.py new file mode 100644 index 0000000..597d553 --- /dev/null +++ b/backend/app/database.py @@ -0,0 +1,42 @@ +"""Database engine, session, and base model.""" +from sqlalchemy import create_engine, event +from sqlalchemy.orm import sessionmaker, DeclarativeBase +from app.config import settings + + +# Engine +if settings.DATABASE_URL.startswith("sqlite"): + engine = create_engine( + settings.DATABASE_URL, + connect_args={"check_same_thread": False}, + echo=False, + ) + # Enable foreign keys for SQLite + @event.listens_for(engine, "connect") + def _fk_pragma_on_connect(dbapi_con, con_record): + cursor = dbapi_con.cursor() + cursor.execute("PRAGMA foreign_keys=ON") + cursor.close() +else: + engine = create_engine(settings.DATABASE_URL, echo=False, pool_pre_ping=True) + +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + + +class Base(DeclarativeBase): + """Declarative base for all models.""" + pass + + +def get_db(): + """FastAPI dependency: yields a database session.""" + db = SessionLocal() + try: + yield db + finally: + db.close() + + +def init_db(): + """Create all tables (used for dev / first run).""" + Base.metadata.create_all(bind=engine)