• python中pydantic库


    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
  • 相关阅读:
    java毕业设计校园互助平台校园帮帮网站源码+lw文档+mybatis+系统+mysql数据库+调试
    聚焦千兆光模块和万兆光模块的测试技术及设备
    「UI开发」DevExpress WPF Pivot Grid组件可轻松实现多维数据分析!(一)
    MySQL进阶篇2-索引的创建和使用
    整数转罗马数字
    路径中的斜杠与反斜杠
    Android Studio(意图Intent)
    4-硝基苯-Β-D-葡萄糖苷酸,4-nitrophenyl-beta-d-glucuronide, cas:10344-94-2
    持续部署Jenkins+Docker +Spring Cloud
    mysql主从复制与读写分离
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/127069443