base_model.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from datetime import datetime
  2. from typing import Optional, Generic, TypeVar
  3. from sqlalchemy import Column, Integer, DateTime, Boolean
  4. from sqlalchemy.ext.declarative import as_declarative, declared_attr
  5. from pydantic import BaseModel as PydanticBaseModel
  6. from ..database import Base
  7. T = TypeVar('T')
  8. @as_declarative()
  9. class BaseModel(Base):
  10. """
  11. SQLAlchemy ORM 基础模型类
  12. """
  13. __abstract__ = True
  14. @declared_attr
  15. def __tablename__(cls) -> str:
  16. return cls.__name__.lower()
  17. id = Column(Integer, primary_key=True, index=True)
  18. class CreateModel:
  19. """
  20. 创建模型Mixin,包含创建相关字段
  21. """
  22. create_at = Column(DateTime, default=datetime.now, comment='创建时间')
  23. create_by = Column(Integer, comment='创建者ID')
  24. class UpdateModel:
  25. """
  26. 更新模型Mixin,包含更新相关字段
  27. """
  28. update_at = Column(DateTime, onupdate=datetime.now, comment='更新时间')
  29. update_by = Column(Integer, comment='更新者ID')
  30. version = Column(Integer, default=1, comment='版本号')
  31. class DeleteModel:
  32. """
  33. 删除模型Mixin,包含删除相关字段
  34. """
  35. is_deleted = Column(Boolean, default=False, comment='是否删除')
  36. delete_at = Column(DateTime, comment='删除时间')
  37. delete_by = Column(Integer, comment='删除者ID')