后端数据操作组合: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"}
相关推荐
葫芦和十三19 小时前
图解 MongoDB 07|索引类型:七种索引,七种访问形状
后端·mongodb·agent
兵慌码乱19 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
朦胧之20 小时前
AI 编程-老项目改造篇
java·前端·后端
金銀銅鐵21 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
爱勇宝1 天前
我做了一个只用来搜歌词的小 App
android·前端·后端
IT_陈寒1 天前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
SelectDB1 天前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
PinkSun1 天前
Spring AI ChatMemory踩坑实录:重启丢数据、Agent丢记忆、对话溢出
后端·ai编程