后端数据操作组合: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"}
相关推荐
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十五):控制台静态页面、深入研究时间格式化方案
后端·go·ai编程
程序猿大帅4 小时前
Java 虚拟线程发布两年后,我们把它从生产环境移除了
后端
Wang ruoxi4 小时前
Pygame 小游戏——一笔画挑战
python·pygame
萧青山4 小时前
AI阅读增强套件:用苏格拉底诘问+对抗性阅读+知识图谱构建深度阅读技能套件(Python实现)
人工智能·python·知识图谱·ai阅读增强
Java面试题总结5 小时前
Python,单引号和双引号有何区别
开发语言·python
lhxcc_fly5 小时前
LangGraph基础知识点
python·langchain·llm·langgraph
Lvan的前端笔记5 小时前
python:Mac 系统 uv 完整安装+入门实战
python·macos·uv
会飞锦鲤5 小时前
基于YOLOv10的瓜果成熟度智能检测系统
人工智能·python·深度学习·yolo·flask
AOwhisky5 小时前
Python 学习笔记(第四期)——字符串:格式化、操作与文本处理——核心知识点自测与详解
开发语言·笔记·python·学习·列表·元组·字典
一次旅行6 小时前
【AI技术_工具】用 MCP 把本地工具接入 Claude_Cursor,让 AI 真正摸到你的数据
大数据·人工智能·python