【Sqlalchemy Model转换成Pydantic Model示例】
由于Sqlalchemy和Pydantic的模型字段类型可能有差异, 所以需要一个通用的装换类
def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函数,将 SQLAlchemy 模型实例转换为 Pydantic 模型实例:param sqlalchemy_model: SQLAlchemy 模型实例:param pydantic_model: Pydantic 模型类:return: Pydantic 模型实例"""data = {}for field_name in pydantic_model.model_fields:if hasattr(sqlalchemy_model, field_name):sqlalchemy_value = getattr(sqlalchemy_model, field_name)# 获取 Pydantic 模型字段的类型pydantic_type = pydantic_model.model_fields[field_name].annotationdata[field_name] = sqlalchemy_valueif (pydantic_type == str or pydantic_type == Optional[str]) and isinstance(sqlalchemy_value, int):data[field_name] = str(sqlalchemy_value)elif (pydantic_type == str or pydantic_type == Optional[str]) and isinstance(sqlalchemy_value, datetime):data[field_name] = sqlalchemy_value.strftime("%Y-%m-%d %H:%M:%S") if sqlalchemy_value else Noneelse:data[field_name] = sqlalchemy_valuereturn pydantic_model.model_validate(data)