Python Pydantic示例
Pydantic 是一个基于类型注解的 Python 库,用于数据验证和模型定义。1. 可通过继承 BaseModel 定义模型,字段支持类型检查与默认值;2. 自动验证数据类型,错误时抛出 ValidationError;3. 使用 @validator 装饰器实现自定义验证逻辑,如范围检查、格式校验;4. 支持从字典、JSON 字符串解析数据,使用 parse_obj 或 parse_raw 方法;5. 可嵌套模型处理复杂结构,如列表中的对象;6. 推荐使用 model_dump() 和 model_dump_json() 输出数据,支持 Config 配置如 extra="ignore" 忽略多余字段,广泛用于 FastAPI 等场景,使数据处理安全且简洁。
Pydantic 是一个非常流行的 Python 库,用于数据解析、验证和类型提示。它基于 Python 的类型注解(type hints),可以自动验证数据结构,非常适合处理 API 请求、配置文件、数据模型等场景。

下面是一个实用的 Pydantic 示例,展示如何定义模型、进行数据验证、处理错误以及一些常用功能。
✅ 基本模型定义与数据验证
from pydantic import BaseModel, ValidationError from typing import Optional class User(BaseModel): name: str age: int email: str is_active: bool = True # 默认值 nickname: Optional[str] = None # 可选字段 # 正常数据 try: user = User( name="Alice", age=30, email="alice@example.com", nickname="Al" ) print(user) # 输出: name='Alice' age=30 email='alice@example.com' is_active=True nickname='Al' except ValidationError as e: print(e)
⚠️ 数据验证失败示例
# 错误数据:age 是字符串,不符合 int 类型 try: user = User( name="Bob", age="not_a_number", # 错误类型 email="bob@example.com" ) except ValidationError as e: print(e) # 输出详细错误信息,比如: # 1 validation error for User # age # value is not a valid integer (type=type_error.integer)
?️ 自定义验证逻辑(使用 @validator
)
from pydantic import validator import re class User(BaseModel): name: str age: int email: str website: Optional[str] = None @validator('age') def check_age(cls, v): if v < 0 or v > 150: raise ValueError('Age must be between 0 and 150') return v @validator('email') def validate_email(cls, v): if not re.match(r'^[^@] @[^@] \.[^@] $', v): raise ValueError('Invalid email format') return v @validator('website', pre=True) # pre=True 表示在类型转换前处理 def validate_website(cls, v): if v and not v.startswith(('http://', 'https://')): v = 'https://' v return v # 测试 try: user = User( name="Charlie", age=25, email="charlie@example.com", website="example.com" ) print(user.website) # 输出: https://example.com except ValidationError as e: print(e)
? 从 JSON 或字典加载数据
data = { "name": "Diana", "age": 28, "email": "diana@example.com" } user = User(**data) print(user.json(indent=2)) # 输出格式化 JSON
或者使用 .parse_obj()
:

user = User.parse_obj(data)
也可以从 JSON 字符串解析:
import json json_str = '{"name": "Eve", "age": 35, "email": "eve@example.com"}' user = User.parse_raw(json_str)
? 模型嵌套(复杂结构)
from typing import List class Address(BaseModel): city: str zipcode: str class Person(BaseModel): name: str addresses: List[Address] # 使用示例 data = { "name": "Frank", "addresses": [ {"city": "Beijing", "zipcode": "100001"}, {"city": "Shanghai", "zipcode": "200001"} ] } person = Person(**data) print(person.json(indent=2))
? 小贴士
- 使用
model_dump()
替代旧版的dict()
(Pydantic v2 推荐) - 使用
model_dump_json()
输出 JSON 字符串 - 支持默认工厂(
default_factory
) - 可设置
Config
控制行为,比如忽略未知字段:
class User(BaseModel): name: str class Config: extra = "ignore" # 忽略多余字段
基本上就这些。Pydantic 让数据验证变得简单、清晰,尤其在 FastAPI 中被广泛使用。不复杂,但非常实用。

以上是Python Pydantic示例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文旨在帮助 SQLAlchemy 初学者解决在使用 create_engine 时遇到的 "RemovedIn20Warning" 警告,以及随之而来的 "ResourceClosedError" 连接关闭错误。文章将详细解释该警告的原因,并提供消除警告以及修复连接问题的具体步骤和代码示例,确保你能够顺利地查询和操作数据库。

Python是实现ETL流程的高效工具,1.数据抽取:通过pandas、sqlalchemy、requests等库可从数据库、API、文件等来源提取数据;2.数据转换:使用pandas进行清洗、类型转换、关联、聚合等操作,确保数据质量并优化性能;3.数据加载:利用pandas的to_sql方法或云平台SDK将数据写入目标系统,注意写入方式与批次处理;4.工具推荐:Airflow、Dagster、Prefect用于流程调度与管理,结合日志报警与虚拟环境提升稳定性与可维护性。

使用Python自动化将Excel数据填入网页表单的方法是:先用pandas读取Excel数据,再用Selenium控制浏览器自动填写并提交表单;具体步骤包括安装pandas、openpyxl和Selenium库,下载对应浏览器驱动,用pandas读取data.xlsx文件中的Name、Email、Phone等字段,通过Selenium启动浏览器打开目标网页,定位表单元素并逐行填入数据,使用WebDriverWait处理动态加载内容,添加异常处理和延迟确保稳定性,最后提交表单并循环处理所有数据行

在JupyterNotebook中使用PandasStyling可实现DataFrame的美观展示,1.使用highlight_max和highlight_min高亮每列最大值(绿色)和最小值(红色);2.通过background_gradient为数值列添加渐变背景色(如Blues或Reds)以直观显示数据大小;3.自定义函数color_score结合applymap为不同分数区间设置文字颜色(≥90绿色,80~89橙色,60~79红色,

安装对应数据库驱动;2.使用connect()连接数据库;3.创建cursor对象;4.用execute()或executemany()执行SQL并用参数化查询防注入;5.用fetchall()等获取结果;6.修改后需commit();7.最后关闭连接或使用上下文管理器自动处理;完整流程确保安全且高效执行SQL操作。

创建Python虚拟环境可使用venv模块,步骤为:1.进入项目目录执行python-mvenvenv创建环境;2.Mac/Linux用sourceenv/bin/activate、Windows用env\Scripts\activate激活;3.使用pipinstall安装包、pipfreeze>requirements.txt导出依赖;4.注意避免将虚拟环境提交到Git,并确认安装时处于正确环境。虚拟环境能隔离项目依赖防止冲突,尤其适合多项目开发,编辑器如PyCharm或VSCode也

使用multiprocessing.Queue可在多个进程间安全传递数据,适合多生产者和消费者的场景;2.使用multiprocessing.Pipe可实现两个进程间的双向高速通信,但仅限两点连接;3.使用Value和Array可在共享内存中存储简单数据类型,需配合Lock避免竞争条件;4.使用Manager可共享复杂数据结构如列表和字典,灵活性高但性能较低,适用于复杂共享状态的场景;应根据数据大小、性能需求和复杂度选择合适方法,Queue和Manager最适合初学者使用。

PythonlistScani ImplementationAking append () Penouspop () Popopoperations.1.UseAppend () Two -Belief StotetopoftHestack.2.UseP OP () ToremoveAndreturnthetop element, EnsuringTocheckiftHestackisnotemptoavoidindexError.3.Pekattehatopelementwithstack [-1] on
