You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中如何通过Pydantic Schema重命名数据库返回的响应键

解决方案

Pydantic 原生支持字段别名映射,完全可以实现你要的效果,逻辑和 NestJS 的字段映射一致。

直接修改schema.py中的 Pydantic 模型,用Field的alias参数关联 ORM 原字段名,开启orm_mode后 Pydantic 会自动从 ORM 实例的对应属性取值,响应输出时会使用你定义的易读字段名。

示例代码(修改后的schema.py)

这里举个例子,把a映射为user_name、b映射为order_id、c映射为pay_amount、d映射为credit_score,你可以根据实际业务替换成需要的字段名:

from pydantic import BaseModel, Field
from datetime import date

class Something(BaseModel):
    DATE: date
    # 格式:易读字段名: 类型 = Field(alias="ORM对应原字段名")
    user_name: str = Field(alias="a")
    order_id: int = Field(alias="b")
    pay_amount: float = Field(alias="c", default=None)
    credit_score: int = Field(alias="d", default=None)
    # 其余不需要修改的字段保持原样即可
    e: int = None
    f: float = None
    g: float = None
    h: int = None

    class Config:
        orm_mode = True
        # Pydantic V2 加这行
        populate_by_name = True
        # 如果你用的是Pydantic V1,把上面那行替换成下面的
        # allow_population_by_field_name = True

路由侧无需额外修改

你原来的app.get()接口声明的response_model=List[schema.Something]完全不用改,FastAPI 会自动按你定义的易读字段名返回响应。

批量映射方案(可选)

如果你有大量字段需要按统一规则映射,可以用 Pydantic 的alias_generator配置批量生成别名,不用逐个写 Field:

class Config:
    orm_mode = True
    populate_by_name = True
    # 可根据自己的映射规则修改生成逻辑
    @staticmethod
    def alias_generator(field_name: str) -> str:
        mapping = {"user_name":"a", "order_id":"b", "pay_amount":"c", "credit_score":"d"}
        return mapping.get(field_name, field_name)

内容的提问来源于stack exchange,提问作者kvothe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:54:03