如何打印包含Schema定义的Pydantic对象?
如何将Pydantic实例数据与Schema定义信息一同输出?
先看你定义的Pydantic模型代码:
from datetime import datetime from pydantic import BaseModel, Field class MainModel(BaseModel): name: str = Field( "example", title='The name', description='The name assigned', ) date: datetime = Field( datetime.now(), title='Date', description='The date of creation...', )
初始化实例后:
example = MainModel( name="test", date=datetime.now() )
你用example.dict()只能拿到实例的纯数据,没有Schema里的title、description这类元信息;而MainModel.schema_json()只能拿到模型的Schema定义,没有实例数据。
Pydantic本身没有提供直接把两者合并输出的方法,你需要自己手动合并两者的字典结果。这里给你一个具体的实现思路:
- 先用
MainModel.schema()获取模型的Schema字典(注意是schema(),不是schema_json(),后者返回JSON字符串),里面的properties字段保存了每个字段的元信息; - 用
example.dict()拿到实例的纯数据; - 遍历实例数据的每个字段,从Schema的
properties中取出对应字段的title、description,和字段值合并成你需要的结构。
具体代码示例:
# 获取Schema字典和实例数据 schema = MainModel.schema() instance_data = example.dict() # 合并数据与元信息 merged_result = {} for field_name, field_value in instance_data.items(): # 从Schema中取出当前字段的元信息 field_meta = schema["properties"].get(field_name, {}) merged_result[field_name] = { "值": field_value, "标题": field_meta.get("title"), "描述": field_meta.get("description") } # 打印合并后的结果 print(merged_result)
运行后会输出类似这样的结构:
{ 'name': { '值': 'test', '标题': 'The name', '描述': 'The name assigned' }, 'date': { '值': datetime.datetime(2024, 5, 20, 15, 30, 0, 123456), '标题': 'Date', '描述': 'The date of creation...' } }
你可以根据自己的需求调整合并后的结构,比如把元信息和值放在同一层级,或者改成其他格式。
内容的提问来源于stack exchange,提问作者Virgil Raitz
相关产品推荐
相关产品推荐

