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

如何在FastAPI响应中返回指定格式的标签列表?

解决方案

方法1:直接调整响应模型与结果提取(推荐)

这是最简洁的方式,直接匹配你期望的响应格式:

  1. 修改TagList模型,将tags字段定义为字符串列表:
from typing import List
from pydantic import BaseModel

class TagList(BaseModel):
    tags: List[str] = []

    class Config:
        from_attributes = True
  1. 在端点代码中,提取查询结果里的name字段值,生成纯字符串列表:
@router.get('/tags', response_model=TagList, status_code=200)
def read_tools(db: Session = Depends(get_session)):
    with db as session:
        query = """
            select 
            name
            from tags
        """
        result = session.execute(text(query))
        # 提取每个结果中的name值,得到纯字符串列表
        tags = result.scalars().all()
    return {'tags': tags}

方法2:保留Tag模型的适配方案

如果必须保留Tag模型,可以通过字段修正和自定义序列化实现:

  1. 修正Tag模型的字段名,与数据库字段匹配:
class Tag(BaseModel):
    name: str  # 将原字段名`nome`改为`name`,对齐数据库字段

    class Config:
        from_attributes = True
  1. 为Tag模型添加自定义序列化规则,让它序列化为字符串:
from pydantic import BaseModel

class Tag(BaseModel):
    name: str

    class Config:
        from_attributes = True
        json_encoders = {
            Tag: lambda tag: tag.name
        }

问题根源说明

  • 原响应模型TagList定义为List[Tag],FastAPI会自动将每个查询结果转为Tag对象,因此返回对象数组;而你需要的是字符串数组,响应模型必须对应调整为List[str]。
  • 数据库查询返回的是Row对象,必须提取其中的name字段值,才能得到纯字符串,否则直接返回Row会被解析为包含字段的字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:50:12