网站首页 > 技术文章 正文
Pydantic
Pydantic 是一个在 Python 中用于数据验证和解析的第三方库。它提供了一种简单且直观的方式来定义数据模型,并使用这些模型对数据进行验证和转换。
Pydantic 的一些主要特性:
- 类型注解:Pydantic 使用类型注解来定义模型的字段类型。你可以使用 Python 内置的类型、自定义类型或者其他 Pydantic 提供的验证类型。
- 数据验证:Pydantic 自动根据模型定义进行数据验证。它会检查字段的类型、长度、范围等,并自动报告验证错误。你可以使用 ValidationError 异常来捕获验证错误。
- 模型转换:Pydantic 提供了从各种数据格式(例如 JSON、字典)到模型实例的转换功能。它可以自动将输入数据解析成模型实例,并保留类型安全性和验证规则。
Pydantic 使用前需要先进行安装。
bashpip install pydantic
Pydantic 基本操作
使用 Pydantic,可以定义一个模型类,该类需要继承 pydantic 中的 BaseModel 类,模型类描述了数据的结构和类型,并指定验证规则。
然后,可以使用这个模型类来验证输入的数据是否符合预期,并以类型安全的方式访问和操作数据。
pythonfrom pydantic import BaseModel, ValidationError
class User(BaseModel):
name: str
age: int
email: str
try:
user = User(name="Alice", age="30", email="alice@example.com")
except ValidationError as e:
print(e.json())
如果创建实例的数据不符合类型注解的要求,则会报 ValidationError 错误。
Pydantic 高级操作
Pydantic 还可以结合 typing 模块,进行默认值,可选字段属性等验证的高级操作。甚至还可以通过 EmailStr 类来直接验证邮件正确性,但该类依赖一个第三方模块,在使用前需要使用 pip install email-validator 进行安装后才可以使用。
from typing import Optional
from pydantic import BaseModel, EmailStr
class User(BaseModel):
name: str
age: int
email: EmailStr
phone: Optional[str] = None
user = User(name="Alice", age=30, email="alice@example.com") # 有效
user = User(name="Alice", age=30, email="invalid_email") # 错误:无效的电子邮件
Field 对象
Field函数提供了许多参数来定制字段的行为。以下是一些常用的参数:
- ...:表示该字段是必填项。
- default:定义字段的默认值。如果未提供该值,则默认为None,不能与 ... 同时使用。
- min_length 和 max_length:针对字符串类型的字段定义最小和最大长度限制。
- gt、ge、lt 和 le:针对数值类型的字段定义大于 gt、大于等于 ge、小于 lt 和小于等于 le 的限制。
from pydantic import BaseModel, EmailStr, ValidationError, Field
class User(BaseModel):
name: str = Field(..., min_length=1, max_length=10)
age: int = Field(..., ge=0, le=200)
email: EmailStr
phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = None
try:
user = User(name="Tom", age=22, email="alice@example.com")
except ValidationError as e:
a = eval(e.json())
print(a[0]["msg"])
finally:
print(user)
数据转换
通过定义模型类,可以将通过网络传输或数据库查询的数据转换成模型类对象在程序中使用。
反之,也可以将处理过后的模型类对象转换成对应的字典或 JSON 数据进行存储或传输。
模型类转换为字典
使用 模型类.model_dump() 方法可以将一个模型类实例对象转换为字典类型数据。
from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):
name: str = Field(..., min_length=1, max_length=10)
age: int = Field(..., ge=0, le=200)
email: EmailStr
phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump(user)
print(data)
print(type(data))
模型类转换为JSON
使用 模型类.model_dump_json() 方法可以将一个模型类实例对象转换为 JSON 字符串。
from pydantic import BaseModel, EmailStr, Field
class User(BaseModel):
name: str = Field(..., min_length=1, max_length=10)
age: int = Field(..., ge=0, le=200)
email: EmailStr
phone: str = Field(default="13800138000", min_length=11, max_length=11)
user = User(name="Tom", age=22, email="alice@example.com")
data = User.model_dump_json(user)
print(data)
print(type(data))
- 上一篇: 新一代Python包管理工具来了
- 下一篇: 如何利用Python开发一个Web网站路径扫描工具?
猜你喜欢
- 2025-01-11 Python国内第三方镜像下载
- 2025-01-11 Python其实很简单 第十四章 模块
- 2025-01-11 TTS它又来了!OpenVoice一款借鉴于TTS实现的强大AI语音克隆工具
- 2025-01-11 一段获取磁盘空间信息的python脚本
- 2025-01-11 Qt 调用Python引擎混合编程
- 2025-01-11 如何利用Python开发一个Web网站路径扫描工具?
- 2025-01-11 新一代Python包管理工具来了
- 2025-01-11 python 基础(四)
- 2025-01-11 Python每日一库之orjson
- 2025-01-11 PySide:基于 Qt 框架的 Python 高级 UI 库
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)