python中pydantic库

不知道大家是否非常羡慕C语言等在进行函数传参时,可以指定数据类型来传参呢?我之前有一篇讲过使用typing来指定数据类型,但是其仅仅是能指定数据类型,只能做一个提醒的作用,那么我们如何来结合typing模块,来写一个可以像Java等语言的指定参数类型呢?这里我推荐pydantic库。首先,在学这个库之前,我们需要去回顾一下typing然后,我们来解释一下我们即将要学的库:其使用 Python 类型注释的数据验证和设置管理。pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。
摘要由CSDN通过智能技术生成

pydantic库详解

一、 概述

1、 简介

该库的官方文档位置为:https://pydantic-docs.helpmanual.io/

不知道大家是否非常羡慕C语言等在进行函数传参时,可以指定数据类型来传参呢?

我之前有一篇讲过使用typing来指定数据类型,但是其仅仅是能指定数据类型,只能做一个提醒的作用,那么我们如何来结合typing模块,来写一个可以像Java等语言的指定参数类型呢?这里我推荐pydantic库。

首先,在学这个库之前,我们需要去回顾一下typing库的使用方法:https://blog.csdn.net/qq_62789540/article/details/124790174

然后,我们来解释一下我们即将要学的库:

其使用 Python 类型注释的数据验证和设置管理。

pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。

定义数据应该如何在纯的、规范的 Python 中保存;用pydantic验证它。

2、 优势

所以pydantic使用了一些很酷的新语言特性,但我为什么要实际去使用它呢?

  • 与您的 IDE/linter/brain 配合得很好

    无需学习新的模式定义微语言。如果你知道如何使用 Python 类型提示,你就会知道如何使用pydantic。数据结构只是您使用类型注释定义的类的实例,因此自动完成、linting、mypy、IDE(尤其是PyCharm)和您的直觉都应该与您的验证数据正常工作。

  • 两用

    pydantic 的 BaseSettings类允许在“验证此请求数据”上下文和“加载我的系统设置”上下文中使用*pydantic 。*主要区别在于系统设置可以从环境变量中读取,并且通常需要更复杂的对象,例如 DSN 和 Python 对象。

  • 快速地

    pydantic一直非常重视性能,大多数库都是用 cython 编译的,加速了约 50%,它通常与大多数类似库一样快或更快。

  • 验证复杂结构

    使用递归pydantic模型typing标准类型(例如ListTupleDict)和 验证器允许清晰、轻松地定义、验证和解析复杂的数据模式。

  • 可扩展

    pydantic允许定义自定义数据类型,或者您可以使用validator装饰器装饰的模型上的方法扩展验证。

  • 数据类集成

    以及BaseModelpydantic提供了一个dataclass装饰器,它创建(几乎)带有输入数据解析和验证的普通 Python 数据类。

3、 环境配置

安装这个库的方法非常简单:

pip install pydantic

安装配置的扩展功能:

pip install pydantic[email]  # 邮箱验证支持
# or
pip install pydantic[dotenv]  # dotenv文件支持
# or just
pip install pydantic[email, dotenv]  # 同时安装

如果想要通过其他方式安装,可以参考官方文档

二、 Model

1、 模型属性

在pydantic中定义对象的主要方法是通过模型(模型只是继承自 的类BaseModel)。

您可以将模型视为类似于严格类型语言中的类型,或者视为 API 中单个端点的要求。

不受信任的数据可以传递给模型,并且在解析和验证之后,pydantic保证生成的模型实例的字段将符合模型上定义的字段类型。

属性 描述
dict() 返回模型字段和值的字典
json() 返回一个JSON字符串表示dict()
copy() 返回模型的副本,浅拷贝
parse_obj() 如果对象不是字典,则用于将任何对象加载到具有错误处理的模型中的实用程序
parse_raw() 用于加载多种格式字符串的实用程序
from_orm() 将数据从任意类加载到模型中
schema() 返回将模型表示为JSON Schema的字典
schema_json() 返回schema()的JSON字符串表示形式
construct() 无需运行验证即可创建模型的类方法
__fields_set__ 初始化模型实例时设置字段名称集
__fields__ 模型字段的字典
__config__ 模型的配置类

2、 基本使用

from pydantic import BaseModel


class Foo(BaseModel):
    count: int
    size: float | None = None


class Bar(BaseModel):
    apple = 'x'
    banana = 'y'


class Spam(BaseModel):
    foo: Foo
    bars: list[Bar]


m = Spam(foo={
   'count': 4}, bars=[{
   'apple': 'x1'}, {
   'apple': 'x2'}])
print(m)
#> foo=Foo(count=4, size=None) bars=[Bar(apple='x1', banana='y'),
#> Bar(apple='x2', banana='y')]
print(m.dict())
"""
{
    'foo': {'count': 4, 'size': None},
    'bars': [
        {'apple': 'x1', 'banana': 'y'},
        {'apple': 'x2', 'banana': 'y'},
    ],
}
"""

3、数据导入

3.1 orm
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值