python进阶-Pydantic模型

1. 什么是 Pydantic

Pydantic 是一个 Python 库,用来:

  • 定义数据结构
  • 自动校验数据
  • 自动类型转换
  • 生成结构化数据(字典、JSON)
  • 配合 FastAPI 实现接口参数校验

一句话:Pydantic 模型 = 带校验规则的数据类。

2. 核心作用

  1. 数据校验:类型不对、格式不对直接报错
  2. 类型自动转换:字符串数字 → int/float
  3. 结构化数据:接口入参、出参统一格式
  4. 自动生成文档 :FastAPI 自动用它生成 /docs
  5. ORM 模型转换:数据库对象 ↔ 接口数据

3. 基础使用

3.1 安装

复制代码
pip install pydantic

3.2 定义最简单的模型

复制代码
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int
    email: str

这就是一个 Pydantic 模型

4. 自动校验 & 自动类型转换

复制代码
user = User(name="张三", age="20", email="xxx@qq.com")
print(user.age)  # 输出 int 20(自动转)

传错类型会直接报错:

复制代码
user = User(name="张三", age="abc", email="xxx")
# 直接抛出 ValidationError

5. 常用字段校验

复制代码
from pydantic import BaseModel, Field, EmailStr

class User(BaseModel):
    name: str = Field(..., min_length=2, max_length=20)
    age: int = Field(..., ge=18, le=100)
    email: EmailStr  # 自动校验邮箱格式

常用规则:

  • min_length / max_length:长度
  • ge:大于等于
  • gt:大于
  • le:小于等于
  • lt:小于
  • ...:表示必填

6. 模型继承

复制代码
class UserBase(BaseModel):
    name: str
    age: int

class UserCreate(UserBase):
    password: str

class UserOut(UserBase):
    id: int

实际开发中非常常用:

  • Base:公共字段
  • Create:创建时需要的字段
  • Out:返回给前端的字段

7. 模型转字典 / JSON

复制代码
user = User(name="张三", age=20, email="xxx@qq.com")

# 转字典
user.dict()

# 转 JSON 字符串
user.json()

8. 嵌套模型

复制代码
class Address(BaseModel):
    city: str
    street: str

class User(BaseModel):
    name: str
    address: Address  # 嵌套模型

9. 列表、泛型

复制代码
from typing import List

class UserOut(BaseModel):
    id: int
    name: str

class UserList(BaseModel):
    total: int
    items: List[UserOut]

10. ORM 模式

FastAPI + SQLAlchemy 必用:

复制代码
class UserOut(BaseModel):
    id: int
    name: str

    class Config:
        orm_mode = True

这样就能直接:

复制代码
user_out = UserOut.from_orm(db_user)

11. 可选字段 & 默认值

复制代码
class User(BaseModel):
    name: str
    age: int | None = None  # 可选
    is_vip: bool = False    # 默认值

12. Pydantic 在 FastAPI 中的作用

  1. 请求体校验

    @app.post("/user")
    def create_user(user: User):
    return user

  2. 查询参数校验

  3. 路径参数校验

  4. 自动生成接口文档 /docs

  5. 统一返回格式

相关推荐
亚林瓜子9 小时前
AWS Glue Python Shell任务中pip安装依赖库
python·shell·pip·aws·glue·job
qq_206901399 小时前
C#怎么使用全局Using C#global using全局引用怎么配置减少每个文件的using声明【语法】
jvm·数据库·python
U盘失踪了9 小时前
go Map
开发语言·golang
好家伙VCC9 小时前
# ARCore+ Kotlin 实战:打造沉浸式增强现实交互应用在
java·python·kotlin·ar·交互
卖报的大地主9 小时前
130万对像素级对齐:SOMA-1M如何打通遥感多模态数据的“最后一公里“
人工智能·python·计算机视觉
skilllite作者9 小时前
SkillLite 架构优化分析报告:项目开发日记
大数据·开发语言·后端·架构·rust·rust沙箱
亚林瓜子9 小时前
AWS Glue Python Shell任务中读取Athena数据库
数据库·python·shell·aws·glue·athena
zhangchaoxies9 小时前
Golang怎么用K8s Secret管理密钥_Golang如何从K8s Secret安全读取密码和证书【操作】
jvm·数据库·python
2402_854808379 小时前
JavaScript中模块化在游戏引擎开发中的资源调度作用
jvm·数据库·python
进击的荆棘9 小时前
C++起始之路——AVL树的实现
开发语言·数据结构·c++·stl·avl