通过用户名查询用户时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
相关产品推荐
相关产品推荐

