"""基础模型类""" from datetime import datetime from typing import Optional, Any from sqlalchemy import Column, String, DateTime, Integer, func from sqlalchemy.ext.declarative import declared_attr from app.core.database import Base class BaseModel(Base): """所有模型的基类,包含通用字段""" __abstract__ = True @declared_attr def __tablename__(cls) -> str: """自动生成表名""" import re name = cls.__name__ # 驼峰转下划线 return re.sub(r'(? dict: """转换为字典""" if exclude is None: exclude = [] result = {} for column in self.__table__.columns: if column.name not in exclude: value = getattr(self, column.name) if isinstance(value, datetime): result[column.name] = value.strftime("%Y-%m-%d %H:%M:%S") else: result[column.name] = value return result class SoftDeleteModel(BaseModel): """支持软删除的模型基类""" __abstract__ = True is_del = Column(Integer, default=0, comment="是否删除: 0-否, 1-是") @classmethod def get_active(cls, db, **kwargs): """获取未删除的记录""" return db.query(cls).filter(cls.is_del == 0, **kwargs) def soft_delete(self, db): """软删除""" self.is_del = 1 db.commit() def restore(self, db): """恢复删除""" self.is_del = 0 db.commit()