| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # app/database.py
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker, Session
- from sqlalchemy.ext.declarative import declarative_base
- from contextlib import contextmanager
- from typing import Generator
- import os
-
- from .config import settings
-
- # 创建数据库引擎
- engine = create_engine(
- settings.DATABASE_URL,
- connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {},
- echo=settings.DEBUG
- )
-
- # 创建会话工厂
- SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
-
- # 声明基类
- Base = declarative_base()
-
- def get_db() -> Generator[Session, None, None]:
- """数据库会话依赖注入"""
- db = SessionLocal()
- try:
- yield db
- finally:
- db.close()
-
- def init_db():
- """初始化数据库表"""
- from .models.user import User
- Base.metadata.create_all(bind=engine)
- print("✅ 数据库表创建完成")
-
- # 创建默认管理员用户
- db = SessionLocal()
- try:
- # 检查是否已存在管理员
- admin = db.query(User).filter(User.username == "admin").first()
- if not admin:
- from .core.security import password_hasher
- admin_user = User(
- username="admin",
- email="admin@caiyouhui.com",
- hashed_password=password_hasher.hash_password("Admin123!"),
- full_name="系统管理员",
- is_active=True,
- is_verified=True,
- is_superuser=True
- )
- db.add(admin_user)
- db.commit()
- print("✅ 默认管理员用户已创建")
- except Exception as e:
- print(f"⚠️ 创建管理员用户时出错: {e}")
- db.rollback()
- finally:
- db.close()
-
- # 导出
- __all__ = ["Base", "engine", "SessionLocal", "get_db", "init_db"]
|