当前位置: 首页 > news >正文

小黑在问题中的日积月累:Pydantic的简单使用

Pydantic 概述

Pydantic 是一个 Python 库,主要用于数据验证和设置管理,通过 Python 类型注解来定义数据模型。它结合了 Python 的类型提示和运行时数据验证,确保数据符合预期格式,常用于 API 开发、配置管理和数据解析。


核心功能

数据验证
Pydantic 模型通过类型注解自动验证输入数据。如果数据不符合类型要求,会抛出清晰的错误信息。

数据转换
自动将输入数据(如 JSON、字典)转换为 Python 对象,支持嵌套模型和复杂类型(如 datetimeUUID)。

设置管理
通过 BaseSettings 类管理环境变量和配置,支持优先级排序(如环境变量 > 配置文件 > 默认值)。

与 FastAPI 集成
Pydantic 是 FastAPI 的默认数据模型库,用于请求/响应数据的校验和序列化。


基本用法

定义模型

通过继承 BaseModel 定义数据模型,字段类型使用 Python 类型注解。

from pydantic import BaseModel, ValidationErrorclass User(BaseModel):name:strage:intmail:str
tom = User(name='大黑驴', age=27, mail='ainiyou@163.com')
tom

User(name=‘大黑驴’, age=27, mail=‘ainiyou@163.com’)

数据验证与转换

实例化模型时自动验证数据,非法数据会触发 ValidationError。 在这里将name变成数字

User(name=111, age=27, mail='ainiyou@163.com')

在这里插入图片描述

打印错误信息

try:User(name=111, age=27, mail='ainiyou@163.com')
except Exception as e:print(e.json())

[
{“type”:“string_type”,
“loc”:[“name”],
“msg”:“Input should be a valid string”,
“input”:111,
“url”:“https://errors.pydantic.dev/2.10/v/string_type”
}
]

基本类型自动转化

Pydantic 会自动尝试将输入数据转化为模型中定义的类型。例如,字符串形式的数字会被自动转化为整数或浮点数。

User(name='小黑黑', age='12', mail='ainiyou@163.com')

User(name=‘小黑黑’, age=12, mail=‘ainiyou@163.com’)

邮箱验证

在 Pydantic 中,可以通过 EmailStr 类型或自定义正则表达式来验证邮箱格式。

from typing import Optional
from pydantic import BaseModel, EmailStrclass User(BaseModel):name:strage:intemail:EmailStrphone:Optional[str]=None
User(name='小黑黑', age=22, email='ainiyou@163.com')

User(name=‘小黑黑’, age=22, email=‘ainiyou@163.com’, phone=None)

User(name='小黑黑', age=22, email='ainiyou163.com')

在这里插入图片描述

Field 对象参数详解

Field 对象通常用于数据模型或表单验证中,定义字段的约束条件、默认值及其他属性。以下是常见参数的详细说明:

required
表示该字段是必填项。若未提供值且未设置默认值,系统会抛出验证错误。此参数通常用于强制用户输入关键信息。在Pydantic中,Field(...) 等价于 required=True

default
定义字段的默认值。如果用户未提供该字段的值,系统会自动填充此默认值。需注意:

  • 默认值为 None 时表示空值。
  • 该参数不能与 required=True 同时使用,否则逻辑冲突。

min_length 和 max_length
针对字符串类型字段的长度限制:

  • min_length:字符串的最小长度,低于此值会触发验证错误。
  • max_length:字符串的最大长度,超出此值会触发验证错误。

数值比较参数
适用于数值类型字段(如整数、浮点数)的边界条件:

  • gt(greater than):字段值必须大于指定值。
  • ge(greater than or equal):字段值必须大于或等于指定值。
  • lt(less than):字段值必须小于指定值。
  • le(less than or equal):字段值必须小于或等于指定值。

示例代码(以 Python 的 Pydantic 模型为例):

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:EmailStrphone:str=Field(default='18103546785', min_length=11, max_length=11)
try:user = User(name='小黑黑', age=202, email='ainiyou163.com', phone='111111')
except ValidationError as e:print('error:', e.json())
print(user)

error: [
{“type”:“less_than_equal”,
“loc”:[“age”],
“msg”:“Input should be less than or equal to 200”,
“input”:202,"ctx:{“le”:200},
“url”:“https://errors.pydantic.dev/2.10/v/less_than_equal”},{“type”:“value_error”,“loc”:[“email”],“msg”:“value is not a valid email address: An email address must have an @-sign.”,“input”:“ainiyou163.com”,“ctx”:{“reason”:“An email address must have an @-sign.”},“url”:“https://errors.pydantic.dev/2.10/v/value_error”},{“type”:“string_too_short”,“loc”:[“phone”],“msg”:“String should have at least 11 characters”,“input”:“111111”,“ctx”:{“min_length”:11},“url”:“https://errors.pydantic.dev/2.10/v/string_too_short”}]
name=‘小黑黑’ age=22 email=‘ainiyou@163.com’ phone=‘1810546785’

转化为字典

# 转成json
user = User(name='小黑黑', age=22, email='ainiyou@163.com', phone='11111111111')
# 转字典
User.model_dump(user)

{‘name’: ‘小黑黑’, ‘age’: 22, ‘email’: ‘ainiyou@163.com’, ‘phone’: ‘11111111111’}

转化为json

User.model_dump_json(user)

‘{“name”:“小黑黑”,“age”:22,“email”:“ainiyou@163.com”,“phone”:“11111111111”}’

剩下的在探索agent源代码中持续积累,继续加油!!

自己独立做的菜,可以下口了,周末继续尝试

在这里插入图片描述

最近状态不好 试着减少跑量不看速度

在这里插入图片描述

早餐星巴克

在这里插入图片描述

楼道平板支撑

在这里插入图片描述

相关文章:

  • 邮件多分类
  • Linux中INADDR_ANY详解
  • LangchainRAG you need - 段落拆分
  • StarRocks
  • 串:BF算法(朴素的魔术匹配算法)
  • c++ chrono头文件含义
  • NGINX `ngx_stream_core_module` 模块概览
  • 软考 系统架构设计师系列知识点之杂项集萃(82)
  • centos查看开启关闭防火墙状态
  • 9.axios底层原理,和promise的对比(2)
  • AI Agent 项目 SUNA 部署环境搭建 - 基于 MSYS2 的 Poetry+Python3.11 虚拟环境
  • git连接本地仓库以及gitee
  • 验证电机理论与性能:电机试验平板提升测试效率
  • 智慧照明:集中控制器、单双灯控制器与智慧灯杆网关的高效协同
  • 18650锂电池组点焊机:高效组装锂电池的关键工具|比斯特自动化
  • 【Pinia】Pinia和Vuex对比
  • 计算机程序文档
  • 虎扑正式易主,迅雷完成收购会带来什么变化?
  • es在Linux安装
  • 美化显示LLDB调试的数据结构
  • 网站代建设费用/品牌运营推广方案
  • 网站目录做二级域名/怎么做表格
  • 网站空间商是什么意思/广告接单有什么平台
  • 游戏介绍网站模板下载/百度搜图入口
  • 网站建设的目的及功能/宁波seo快速优化平台
  • 广告设计要学哪些软件/东莞百度推广排名优化