Files
----/后端源码/yifan.action-ai.cn/app/core/serialize.py

56 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
from pydantic import BaseModel
from typing import Any, TypeVar, Type, Generic
from sqlalchemy.orm import DeclarativeBase
ModelType = TypeVar("ModelType", bound=DeclarativeBase)
SchemaType = TypeVar("SchemaType", bound=BaseModel)
class Serialize(Generic[ModelType, SchemaType]):
"""
序列化工具类提供模型、Schema 和字典之间的转换功能
"""
@classmethod
def schema_to_model(cls,schema: Type[SchemaType], model: Type[ModelType]) -> ModelType:
"""
将 Pydantic Schema 转换为 SQLAlchemy 模型
参数:
- schema (Type[SchemaType]): Pydantic Schema 实例。
- model (Type[ModelType]): SQLAlchemy 模型类。
返回:
- ModelType: SQLAlchemy 模型实例。
异常:
- ValueError: 转换过程中可能抛出的异常。
"""
try:
return model(**cls.model_to_dict(model, schema))
except Exception as e:
raise ValueError(f"序列化失败: {str(e)}")
@classmethod
def model_to_dict(cls, model: Type[ModelType], schema: Type[SchemaType]) -> dict[str, Any]:
"""
将 SQLAlchemy 模型转换为 Pydantic Schema
参数:
- model (Type[ModelType]): SQLAlchemy 模型实例。
- schema (Type[SchemaType]): Pydantic Schema 类。
返回:
- dict[str, Any]: 包含模型数据的字典。
异常:
- ValueError: 转换过程中可能抛出的异常。
"""
try:
return schema.model_validate(model).model_dump()
except Exception as e:
raise ValueError(f"反序列化失败: {str(e)}")