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
相关产品推荐
相关产品推荐

