码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python中pydantic库


    文章目录

    • pydantic库详解
      • 一、 概述
        • 1、 简介
        • 2、 优势
        • 3、 环境配置
      • 二、 Model
        • 1、 模型属性
        • 2、 基本使用
        • 3、数据导入
          • 3.1 orm
          • 3.2 pickle
          • 3.3 json
        • 4、 数据导出
      • 三、 验证器
        • 1、 类内添加
        • 2、 重用验证器
        • 3、 根验证器
        • 4、 验证装饰器

    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的 标准类型(例如List、Tuple等Dict)和 验证器允许清晰、轻松地定义、验证和解析复杂的数据模式。

    • 可扩展

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

    • 数据类集成

      以及BaseModel,pydantic提供了一个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
  • 相关阅读:
    【深蓝学院】手写VIO第8章--相机与IMU时间戳同步--笔记
    PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行
    泽攸科技JS系列高精度台阶仪在半导体领域的应用
    R语言统计分析:bootstrap方法
    R语言ggplot2可视化:使用ggpubr包的ggviolin函数可视化小提琴图、设置palette参数自定义不同水平小提琴图的边框颜色
    前缀和与树状数组(手撕算法篇)
    Swagger3+knife4j的使用
    【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(上)
    开咖啡店怎样提高业绩?用这五招突破
    JavaScript实现排序算法
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/127069443
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号