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

DynamoDB delete_item参数问题:FastAPI删除接口返回不存在错误

问题:DynamoDB delete_item 提示主键不存在,但数据实际存在

我编写了一个用于DynamoDB delete_item操作的FastAPI接口,代码如下:

@app.delete("/delete-student/{student_id}")
def delete_student(student_id : str):
    db = connect_ddb()
    try:
        response = db.delete_item(Key={"id": student_id})
        return response
    except Exception as error:
        return {"error message": error}    

使用requests库测试时:

x = requests.delete('endpoint/prod/delete-student/7')
>>> 
'{"error":"student_id: {student_id} does not exist"}'

我已成功创建并查询到ID为7的学生数据,但删除接口返回上述错误。该错误并非来自代码的异常捕获块,而是DynamoDB的响应。我使用的Key参数与get_item时一致,想请教DynamoDB对student_id参数存在什么问题?


解决方案

以下是几个可能的原因及对应解决方法:

  • 主键数据类型不匹配:
    DynamoDB是强类型数据库,若表中id字段为数字类型(Number),但你传入的student_id是字符串类型(如"7"),会导致匹配失败——字符串"7"和数字7在DynamoDB中是完全不同的主键值。
    解决方法:将student_id转为数字类型后传入:

    response = db.delete_item(Key={"id": int(student_id)})
    
  • 连接的表或AWS区域不一致:
    检查connect_ddb()方法是否连接到了正确的表和AWS区域。有可能查询时用的是测试表,删除时连接到了生产表,或区域不匹配导致无法找到目标数据。

  • 表使用复合主键但未传全:
    如果你的表定义了复合主键(分区键+排序键),delete_item的Key参数必须同时提供两个键的值,仅传分区键id无法定位到具体条目。确认表的主键结构,补充完整的Key参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:51:07