- ORM (如 SQLAlchemy、Django ORM):负责数据库交互 (存、取、改数据),返回的是数据库模型对象
- Pydantic :负责数据校验 + 格式转换 ,把 ORM 数据库对象转换成安全、规范的 JSON 数据(给接口用)
Pydantic 专门为 ORM 做了ORM 模式,完美解决「数据库对象 → API 响应数据」的痛点。
介绍Pydantic
Python 最流行的数据验证库 ,FastAPI 内置依赖。
核心能力:
- 自动校验数据类型(字符串 / 数字 / 日期等)
- 自动把非字典对象(ORM 对象)转成字典 / JSON
- 定义接口入参、出参格式
总结:
支持对前端传入的请求数据进行类型校验、格式校验与规则约束 ;同时兼容 ORM 模型实体,可自动映射提取对应属性 ,快速序列化为字典或 JSON 结构用于接口响应返回。
最简示例(SQLAlchemy + Pydantic)
1. 定义 ORM 数据库模型(存数据)
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# 数据库表模型:对应 user 表
class UserDB(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
email = Column(String, unique=True, index=True)
password = Column(String) # 敏感字段,接口不返回
2. 定义 Pydantic 模型(返回数据)
from pydantic import BaseModel, EmailStr
# Pydantic 模型:定义接口返回格式
class UserResponse(BaseModel):
id: int
name: str
email: EmailStr # 自动校验邮箱格式
# 🔥 关键配置:开启 ORM 模式
class Config:
from_attributes = True
3. 直接把 ORM 对象转 Pydantic 对象
# 模拟从数据库查出的 ORM 对象
user_orm = UserDB(id=1, name="张三", email="zhangsan@test.com", password="123456")
# ✅ ORM 对象 → Pydantic 模型(自动过滤 password)
user_pydantic = UserResponse.from_orm(user_orm)
# 转 JSON 给接口
print(user_pydantic.model_dump_json())
输出结果(自动剔除敏感字段、校验格式):
{"id":1,"name":"张三","email":"zhangsan@test.com"}