python动态生成pydantic的basemodel类

4 篇文章 1 订阅
1 篇文章 0 订阅

概述

动态生成pydantic的basemodel类有两种方式,第一种就是我们比较熟悉的使用exec直接把字符串转变为代码,通过拼接相关字符串实现动态生成;第二种是根据pydantic提供的类来自行组装basemodel类,这种比较常见(我个人认为第一种好像更简单粗暴一点)。

基于exec

示例:

x="""class BM(BaseModel):
	x:int
"""
from pydantic import BaseModel
BM=exec(x,{“BaseModel”:BaseModel})#这里要手动把BaseModel类传递进去

基于组装

组装的方式是预先定义所有需要的类型和变量的dict,通过type进行组装生成一个类。
示例如下:

#记录所有字段的限制等的功能
pconfig: Type[pydantic.main.BaseConfig] = type(
        "Config",
        (PydanticModel.Config,),
        {"title": name or cls.__name__, "extra": pydantic.main.Extra.forbid, "fields": {'id': {'ge': 1, 'le': 2147483647, 'description': '', 'title': 'Id'}, 'name': {'max_length': 100, 'description': '', 'title': 'Name'}, 'created_at': {'readOnly': True, 'description': 'The date-time the Tournament record was created at', 'title': 'Created At'}}},
    )#这里的相关参数就替代了Field和Form等参数的注释功能
    
properties={'__annotations__': {'id': <class 'int'>, 'name': <class 'str'>, 'created_at': <class 'datetime.datetime'>}, 'Config': <class 'tortoise.contrib.pydantic.creator.Config'>}
#_name为一个类型
model = cast(Type[PydanticModel], type(_name, (PydanticModel,), properties))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值