You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pydantic 2.0+对象Redis缓存问题:含exclude字段的序列化修复需求

解决方案

修复现有代码的简单方法

问题根源是model_dump_json默认会遵循字段的exclude=True规则,哪怕你手动指定include所有模型字段,被标记为exclude的字段仍会被过滤。要强制保留这些字段,只需在序列化时将exclude参数设为空集合,覆盖字段级别的排除规则:

from pydantic import BaseModel, Field, computed_field


class MyModel(BaseModel):
    name: str
    hidden_field: str = Field(exclude=True, default=None)

    @computed_field
    def visible_upper(self) -> str:
        try:
            return self.hidden_field.upper()
        except:
            return ""


my_obj = MyModel(name="foo", hidden_field="bar")

print("Before serialization:", my_obj.visible_upper)

# 强制包含所有字段,忽略字段级exclude规则
my_dump = my_obj.model_dump_json(exclude=set())

my_obj = MyModel.model_validate_json(my_dump)

print("After serialization:", my_obj.visible_upper)

执行后输出恢复正常:

Before serialization: BAR
After serialization: BAR

如果要适配任意Pydantic模型,可封装通用序列化/反序列化函数:

def serialize_pydantic(obj):
    return obj.model_dump_json(exclude=set())

def deserialize_pydantic(json_str, model_cls):
    return model_cls.model_validate_json(json_str)

适用的现代工具包

若不想手动实现缓存逻辑,可使用pydantic-redis——它专为Pydantic 2.x设计,支持直接将模型缓存到Redis,自动处理序列化/反序列化,无需手动处理字段排除问题:

安装命令:

pip install pydantic-redis

简单使用示例:

from pydantic_redis import Model, Store, RedisConfig

class MyModel(Model):
    _primary_key_field: str = "name"
    name: str
    hidden_field: str = Field(exclude=True, default=None)

    @computed_field
    def visible_upper(self) -> str:
        try:
            return self.hidden_field.upper()
        except:
            return ""

# 配置Redis连接
redis_config = RedisConfig(db=0, host="localhost", port=6379)
store = Store(name="my_store", redis_config=redis_config, life_span=3600)

# 注册模型到缓存存储
store.register_model(MyModel)

# 插入对象到缓存
my_obj = MyModel(name="foo", hidden_field="bar")
MyModel.insert([my_obj])

# 从缓存读取对象
cached_obj = MyModel.get(ids=["foo"])[0]
print(cached_obj.visible_upper)  # 输出 BAR

内容的提问来源于stack exchange,提问作者Tolik K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:25:14