from datetime import datetime from sqlalchemy import Column, String, Integer, DateTime from sqlalchemy.ext.asyncio import AsyncAttrs from sqlalchemy.orm import DeclarativeBase class Base(AsyncAttrs, DeclarativeBase): pass class BaseModel(Base): """基础模型类,包含id字段""" __abstract__ = True id = Column(Integer, primary_key=True, autoincrement=True, comment="主键") @classmethod def to_dict(cls): """ 将模型对象转换为字典 :return: 字典 """ return {c.name: getattr(cls, c.name) for c in cls.__table__.columns()} @classmethod def from_dict(cls, data: dict): """ 将字典转换为模型对象 :param data: 字典 :return: 模型对象 """ for key, value in data.items(): setattr(cls, key, value) return cls def update(self, data: dict): """ 从字典更新模型属性 :param data: 包含更新数据的字典 """ for key, value in data.items(): if hasattr(self, key): setattr(self, key, value) class CreateModelBase(BaseModel): __abstract__ = True create_by = Column(String(64), default="", comment="创建者") create_time = Column(DateTime, comment="创建时间", default=datetime.now()) pass class UpdateModelBase(CreateModelBase): __abstract__ = True update_by = Column(String(64), default="", comment="更新者") update_time = Column(DateTime, comment="更新时间", default=datetime.now()) pass class SoftDeleteModelBase(BaseModel): """软删除模型类""" __abstract__ = True is_del = Column(Integer, default=0, comment="删除标志(0代表存在 1代表删除)") deleted_by = Column(String(64), default=None, comment="删除者") deleted_time = Column(DateTime, default=None, comment="删除时间") class FullModelBase(UpdateModelBase, SoftDeleteModelBase): __abstract__ = True pass class OrderModelBase(Base): __abstract__ = True order_num = Column(Integer, default=0, comment="显示顺序") pass