Python - pydantic(1) 入门介绍与 Models 的简单使用

简介: Python - pydantic(1) 入门介绍与 Models 的简单使用

前言


为啥要学这个,因为 FastAPI 是基于它进行开发的,而且是个不错的框架,所以有必要深入学习

 

前置学习

Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html

typing 模块:https://www.cnblogs.com/poloyy/p/15150315.html

 

Pydantic 介绍


  • 使用 python 类型注释来进行数据校验和 settings 管理
  • pydantic 可以在代码运行时强制执行类型提示,并在数据校验无效时提供友好的错误提示
  • 定义数据应该如何在规范的 python 代码中保存,然后通过 Python 验证它

 

Pydantic 安装


pip install pydantic

 

测试 pydantic 是否已编译

import pydantic
print('compiled:', pydantic.compiled)
# 输出结果
compiled: True


Pydantic 注意事项


  • pydantic 是一个解析库,而不是一个验证库
  • 验证是达到目的一种手段,构建符合所提供的类型和约束的模型
  • 简单来说:pydantic 保证输出模型的类型和约束,而不是输入数据

 

Models


简介

  • 在 pydantic 中定义对象的主要方法是通过模型(模型是从 BaseModel 继承的类)
  • 所有基于 pydantic 的数据类型本质上都是一个 BaseModel
  • 可以将模型视为强类型语言中的类型(比如 Java)
  • 不受信任的数据可以传递给模型,经过解析和验证后,pydantic 保证生成的模型实例的字段将符合定义的字段类型(实例字段类型符合类定义的字段类型)

 

基础模型使用

from pydantic import BaseModel


class User(BaseModel):

   id: int

   name = "小菠萝测试笔记"

  • User 就是一个模型(Models),有两个字段(属性)
  • id,整数 int 类型,是必传的
  • name,字符串 string 类型,不是必传,有默认值

 

为什么能知道 name 是 string 类型?

因为默认值是 string 类型,因此不需要类型提示( name : string

注意:当某些字段没有类型提示时,需要注意有关字段顺序的警告

 

声明一个有效实例

user = User(id='123')

  • user 是 User 模型的一个实例对象,就叫模型实例对象吧
  • 对象的初始化会执行所有解析和验证,如果没有抛出 ValidationError,证明生成的模型实例是有效的

 

访问模型实例对象的属性

user = User(id='123')
print(user.id, type(user.id))
print(user.name, type(user.name))
# 输出结果
123 <class 'int'>
小菠萝测试笔记 <class 'str'>


  • id 属性传的是字符串 '123',它会根据模型字段类型进行转换为 int
  • name 属性取了默认值

 

__fields_set__

该变量返回用户初始化对象时提供了什么字段

# __fields_set__
user = User(id='123')
print(user.__fields_set__ == {'id'})
print(user.__fields_set__ == {'name'})
user = User(id='123', name="test")
print(user.__fields_set__ == {'id', 'name'})
print(user.__fields_set__ == {'id'})
# 输出结果
True
False
True
False


dict()

可以提供字段的字典对象

# dict()
user = User(id='123')
print(user.dict())
print(dict(user))
# 输出结果
{'id': 123, 'name': '小菠萝测试笔记'}
{'id': 123, 'name': '小菠萝测试笔记'}


修改模型实例对象的属性

# 修改模型实例属性值
user = User(id='123')
user.id = 321
print(user.id)
# 输出结果
321


BaseModels 属性


其实就是 BaseModels 有什么自带的方法、属性

 

dict()

返回模型字段和值,字典格式

user = User(id='123', name="test")

print(user.dict(), type(user.dict()))



# 输出结果

{'id': 123, 'name': 'test'} <class'dict'>

 

json()

返回模型字段和值,json 字符串格式

user = User(id='123', name="test")

print(user.json(), type(user.json()))


# 输出结果

{"id": 123, "name": "test"} <class'str'>

 

schema()

以 JSON Schema 形式返回模型,字典格式

user = User(id='123', name="test")
print(user.schema(), type(user.schema()))
# 输出结果
{
    "title": "User",
    "type": "object",
    "properties": {
        "id": {
            "title": "Id",
            "type": "integer"
        },
        "name": {
            "title": "Name",
            "default": "小菠萝测试笔记",
            "type": "string"
        }
    },
    "required": [
        "id"
    ]
}
<class 'dict'>


schema_json()

以 JSON Schema 形式返回模型,json 字符串格式

user = User(id='123', name="test")
print(user.schema_json(), type(user.schema_json()))
# 输出结果
{
    "title": "User",
    "type": "object",
    "properties": {
        "id": {
            "title": "Id",
            "type": "integer"
        },
        "name": {
            "title": "Name",
            "default": "小菠萝测试笔记",
            "type": "string"
        }
    },
    "required": [
        "id"
    ]
}
<class 'str'>


copy()

浅拷贝模型对象

 

相关文章
|
1月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
74 0
|
11天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
100 1
|
2月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
101 0
|
2月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
106 0
|
16天前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
83 5
|
4月前
|
Python
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
221 80
|
29天前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。
|
1月前
|
存储 缓存 安全
Python字典:从入门到精通的实用指南
Python字典如瑞士军刀般强大,以键值对实现高效数据存储与查找,广泛应用于配置管理、缓存、统计等场景。本文详解字典基础、进阶技巧、实战应用与常见陷阱,助你掌握这一核心数据结构,写出更高效、优雅的Python代码。
44 0
|
2月前
|
数据挖掘 数据处理 C++
Python Lambda:从入门到实战的轻量级函数指南
本文通过10个典型场景,详解Python中Lambda匿名函数的用法。Lambda适用于数据处理、排序、条件筛选、事件绑定等简洁逻辑,能提升代码简洁性和开发效率。同时提醒避免在复杂逻辑中过度使用。掌握Lambda,助你写出更高效的Python代码。
123 0

推荐镜像

更多