后端数据操作组合:Pydantic与ORM

  • 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"}
相关推荐
I Am a robert girl几秒前
当传感器学会“说谎“:拆解可靠性门控的稀疏惯性动捕融合
python·姿态估计·传感器融合·惯性动捕·imu传感器·可靠性门控·可穿戴计算
架构技术专栏18 分钟前
交叉熵:AI 怎样给概率预测打分
后端
李航198331 分钟前
AI定制柜建模,需要详细的建模规范和标准流程
人工智能·python·计算机视觉·ai·ai编程
沙漠之主1 小时前
Python 教学设计资料:从入门到实战的完整课程方案
爬虫·python
IT_陈寒2 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
ebiobiz2 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
要努力啊4692 小时前
用 Codex 加速 Java 开发:从代码生成到测试覆盖的完整实战
后端
dora2 小时前
LangChain4j 新手入门实战教程(Java版)
后端·langchain·agent
蜗牛互联网2 小时前
MongoDB Atlas Agent Engine之后,如何用版本门禁防止陈旧写入
java·数据库·人工智能·后端·mongodb
慢云智慧空间2 小时前
从智能终端到空间AI,慢云科技如何重新定义智慧建筑的核心能力?
人工智能·python·科技