后端数据操作组合: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"}
相关推荐
大可不必了2 小时前
03 函数定义和调用
开发语言·python
承渊政道3 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛3 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
GISer_Jing3 小时前
Agent核心内容
后端·ai·langchain
imgsq3 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
budingxiaomoli4 小时前
Spring统一功能处理
java·后端·spring
eggwyw4 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
2601_967979125 小时前
纯手写:Python安装pip完整教程,搞了几小时,终于成功
python·教程·pip·安装·包管理
某鹏5 小时前
网关选型:Go、Java、Graal 谁都不能完胜
后端
Norna5 小时前
缓存文件从没写出来:一个 .json 被当成目录用了
python