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

FastAPI实现:通过ID或唯一名称PUT更新整行数据

问题修复与PUT接口实现方案

一、修复单个玩家查询接口

原代码仅构建了查询对象,未执行实际查询,也未处理玩家不存在的场景,修改后的代码如下:

from fastapi import HTTPException

@app.get("/players/{player_id}", response_model=PlayerModel)
async def read_player(db: db_dependency, player_id: int):
    player = db.query(models.Player).filter_by(id=player_id).first()
    if not player:
        raise HTTPException(status_code=404, detail="玩家不存在")
    return player

核心修改点:

  • 新增.first()执行查询,获取单个玩家数据
  • 添加404异常处理,符合RESTful接口规范

二、PUT更新接口实现

根据你的React应用场景(输入玩家名称更新is_active),同时提供通用整行更新方案:

方案1:按玩家名称更新活跃状态(适配React场景)

from pydantic import BaseModel

# 定义仅用于更新活跃状态的请求模型
class PlayerActiveUpdate(BaseModel):
    active: bool

@app.put("/players/name/{player_name}", response_model=PlayerModel)
async def update_player_active_by_name(db: db_dependency, player_name: str, update_data: PlayerActiveUpdate):
    player = db.query(models.Player).filter_by(name=player_name).first()
    if not player:
        raise HTTPException(status_code=404, detail="玩家不存在")
    
    player.active = update_data.active
    db.commit()
    db.refresh(player)
    return player

方案2:按ID更新整行玩家数据(通用更新场景)

如果需要支持修改玩家名称等其他字段,可使用该方案:

from pydantic import BaseModel, Optional

# 定义支持部分字段更新的模型
class PlayerUpdate(BaseModel):
    name: Optional[str] = None
    active: Optional[bool] = None

@app.put("/players/{player_id}", response_model=PlayerModel)
async def update_player_by_id(db: db_dependency, player_id: int, update_data: PlayerUpdate):
    player = db.query(models.Player).filter_by(id=player_id).first()
    if not player:
        raise HTTPException(status_code=404, detail="玩家不存在")
    
    # 仅更新请求中提供的字段
    for key, value in update_data.dict(exclude_unset=True).items():
        setattr(player, key, value)
    
    db.commit()
    db.refresh(player)
    return player

注意事项

  • 所有更新操作必须调用db.commit()提交事务,db.refresh()用于同步数据库最新数据返回给客户端
  • 必须处理资源不存在的情况,避免返回空数据或引发内部错误
  • 方案2中exclude_unset=True确保只更新请求里明确提供的字段,不会覆盖未修改的原有值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:17:09