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

通过用户名查询用户时API返回422错误,求修复方案

问题修复方案

1. 修正路由路径不匹配

你的API路由定义为/user/{username},但实际请求路径是/users/test,路径缺少复数后缀s,这会导致FastAPI无法匹配到正确路由,进而触发422错误。修改main.py中的路由:

@app.get("/users/{username}")
async def get_user_username(username: str):
    return conn.execute(users.select().where(users.c.username == username)).fetchall()

2. 修复响应序列化问题

直接返回数据库查询的fetchall()结果时,FastAPI无法自动将数据库行对象序列化为符合要求的JSON格式,这是422错误的核心原因之一。需要将查询结果转换为Pydantic模型可处理的格式:

from schemas.users import User

@app.get("/users/{username}", response_model=list[User])
async def get_user_username(username: str):
    query_result = conn.execute(users.select().where(users.c.username == username)).fetchall()
    # 将数据库行转换为字典列表
    return [dict(row) for row in query_result]

3. 进阶优化(可选)

如果业务逻辑中用户名是唯一的,建议调整为查询单个用户并处理不存在的情况,提升接口健壮性:

from fastapi import HTTPException
from schemas.users import User

@app.get("/users/{username}", response_model=User)
async def get_user_username(username: str):
    query_result = conn.execute(users.select().where(users.c.username == username)).fetchone()
    if not query_result:
        raise HTTPException(status_code=404, detail="用户不存在")
    return dict(query_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:30:33