目录
✅ 基本模型定义与数据验证
⚠️ 数据验证失败示例
?️ 自定义验证逻辑(使用 @validator
? 从 JSON 或字典加载数据
? 模型嵌套(复杂结构)
? 小贴士
首页 后端开发 Python教程 Python Pydantic示例

Python Pydantic示例

Aug 01, 2025 am 07:00 AM

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 等场景,使数据处理安全且简洁。

python pydantic example

Pydantic 是一个非常流行的 Python 库,用于数据解析、验证和类型提示。它基于 Python 的类型注解(type hints),可以自动验证数据结构,非常适合处理 API 请求、配置文件、数据模型等场景。

python pydantic example

下面是一个实用的 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()

python pydantic example
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 example

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SQLAlchemy 2.0 弃用警告及连接关闭问题解决指南 SQLAlchemy 2.0 弃用警告及连接关闭问题解决指南 Aug 05, 2025 pm 07:57 PM

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

数据工程ETL的Python 数据工程ETL的Python Aug 02, 2025 am 08:48 AM

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

如何使用Python自动化从Excel到Web表单的数据输入? 如何使用Python自动化从Excel到Web表单的数据输入? Aug 12, 2025 am 02:39 AM

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

python pandas造型数据框架示例 python pandas造型数据框架示例 Aug 04, 2025 pm 01:43 PM

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

如何在Python中执行SQL查询? 如何在Python中执行SQL查询? Aug 02, 2025 am 01:56 AM

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

如何在Python中创建虚拟环境 如何在Python中创建虚拟环境 Aug 05, 2025 pm 01:05 PM

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

如何在Python中的多个过程之间共享数据? 如何在Python中的多个过程之间共享数据? Aug 02, 2025 pm 01:15 PM

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

如何使用Python中的列表实现堆栈数据结构? 如何使用Python中的列表实现堆栈数据结构? Aug 03, 2025 am 06:45 AM

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

See all articles