CaiYouHui后端fastapi实现

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # app/database.py
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.orm import sessionmaker, Session
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from contextlib import contextmanager
  6. from typing import Generator
  7. import os
  8. from .config import settings
  9. # 创建数据库引擎
  10. engine = create_engine(
  11. settings.DATABASE_URL,
  12. connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {},
  13. echo=settings.DEBUG
  14. )
  15. # 创建会话工厂
  16. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  17. # 声明基类
  18. Base = declarative_base()
  19. def get_db() -> Generator[Session, None, None]:
  20. """数据库会话依赖注入"""
  21. db = SessionLocal()
  22. try:
  23. yield db
  24. finally:
  25. db.close()
  26. def init_db():
  27. """初始化数据库表"""
  28. from .models.user import User
  29. Base.metadata.create_all(bind=engine)
  30. print("✅ 数据库表创建完成")
  31. # 创建默认管理员用户
  32. db = SessionLocal()
  33. try:
  34. # 检查是否已存在管理员
  35. admin = db.query(User).filter(User.username == "admin").first()
  36. if not admin:
  37. from .core.security import password_hasher
  38. admin_user = User(
  39. username="admin",
  40. email="admin@caiyouhui.com",
  41. hashed_password=password_hasher.hash_password("Admin123!"),
  42. full_name="系统管理员",
  43. is_active=True,
  44. is_verified=True,
  45. is_superuser=True
  46. )
  47. db.add(admin_user)
  48. db.commit()
  49. print("✅ 默认管理员用户已创建")
  50. except Exception as e:
  51. print(f"⚠️ 创建管理员用户时出错: {e}")
  52. db.rollback()
  53. finally:
  54. db.close()
  55. # 导出
  56. __all__ = ["Base", "engine", "SessionLocal", "get_db", "init_db"]