from datetime import datetime from typing import Optional, Generic, TypeVar from sqlalchemy import Column, Integer, DateTime, Boolean from sqlalchemy.ext.declarative import as_declarative, declared_attr from pydantic import BaseModel as PydanticBaseModel from ..database import Base T = TypeVar('T') @as_declarative() class BaseModel(Base): """ SQLAlchemy ORM 基础模型类 """ __abstract__ = True @declared_attr def __tablename__(cls) -> str: return cls.__name__.lower() id = Column(Integer, primary_key=True, index=True) class CreateModel: """ 创建模型Mixin,包含创建相关字段 """ create_at = Column(DateTime, default=datetime.now, comment='创建时间') create_by = Column(Integer, comment='创建者ID') class UpdateModel: """ 更新模型Mixin,包含更新相关字段 """ update_at = Column(DateTime, onupdate=datetime.now, comment='更新时间') update_by = Column(Integer, comment='更新者ID') version = Column(Integer, default=1, comment='版本号') class DeleteModel: """ 删除模型Mixin,包含删除相关字段 """ is_deleted = Column(Boolean, default=False, comment='是否删除') delete_at = Column(DateTime, comment='删除时间') delete_by = Column(Integer, comment='删除者ID')