base_model.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from datetime import datetime
  2. from sqlalchemy import Column, String, Integer, DateTime
  3. from sqlalchemy.ext.asyncio import AsyncAttrs
  4. from sqlalchemy.orm import DeclarativeBase
  5. class Base(AsyncAttrs, DeclarativeBase):
  6. pass
  7. class BaseModel(Base):
  8. """基础模型类,包含id字段"""
  9. __abstract__ = True
  10. id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
  11. @classmethod
  12. def to_dict(cls):
  13. """
  14. 将模型对象转换为字典
  15. :return: 字典
  16. """
  17. return {c.name: getattr(cls, c.name) for c in cls.__table__.columns()}
  18. @classmethod
  19. def from_dict(cls, data: dict):
  20. """
  21. 将字典转换为模型对象
  22. :param data: 字典
  23. :return: 模型对象
  24. """
  25. for key, value in data.items():
  26. setattr(cls, key, value)
  27. return cls
  28. def update(self, data: dict):
  29. """
  30. 从字典更新模型属性
  31. :param data: 包含更新数据的字典
  32. """
  33. for key, value in data.items():
  34. if hasattr(self, key):
  35. setattr(self, key, value)
  36. class CreateModelBase(BaseModel):
  37. __abstract__ = True
  38. create_by = Column(String(64), default="", comment="创建者")
  39. create_time = Column(DateTime, comment="创建时间", default=datetime.now())
  40. pass
  41. class UpdateModelBase(CreateModelBase):
  42. __abstract__ = True
  43. update_by = Column(String(64), default="", comment="更新者")
  44. update_time = Column(DateTime, comment="更新时间", default=datetime.now())
  45. pass
  46. class SoftDeleteModelBase(BaseModel):
  47. """软删除模型类"""
  48. __abstract__ = True
  49. is_del = Column(Integer, default=0, comment="删除标志(0代表存在 1代表删除)")
  50. deleted_by = Column(String(64), default=None, comment="删除者")
  51. deleted_time = Column(DateTime, default=None, comment="删除时间")
  52. class FullModelBase(UpdateModelBase, SoftDeleteModelBase):
  53. __abstract__ = True
  54. pass
  55. class OrderModelBase(Base):
  56. __abstract__ = True
  57. order_num = Column(Integer, default=0, comment="显示顺序")
  58. pass