DynamoDB执行PutItem未创建新条目也未更新主键问题求助
你遇到的问题根源是 put_item 方法的 ConditionExpression 逻辑配置错误,具体原因如下:
- 第一,DynamoDB 中
PutItem的条件表达式仅作用于你本次要写入的 Item 主键对应的已存在记录:你本次提交写入的 Item 主键session_id是真实会话ID,和你在条件表达式里传的:session_id=999999999完全不匹配,条件永远无法满足,PutItem 操作直接被拒绝,所以既不会生成新条目,也不会修改旧条目。 - 第二,你提到的无报错属于异常遗漏:当条件表达式校验失败时,DynamoDB 会抛出
ConditionalCheckFailedException异常,你没有捕获该异常的情况下如果上层逻辑吞了异常,就会出现「无报错但操作没生效」的情况。 - 第三,你的功能逻辑本身也存在对PutItem的误用:PutItem 只会对提交的主键对应的条目做覆盖/新增操作,完全无法修改已有条目的主键值,你想把999999999的主键改成真实session_id的需求,本身就不可能通过单次PutItem实现。
解决方案
根据你的需求可选对应方案:
- 仅需新增真实session_id的新条目,保留999999999的占位记录:直接去掉
put_item调用中的ConditionExpression和ExpressionAttributeValues参数即可,只要传入的session_id是新值,DynamoDB会自动生成新条目。 - 需要把999999999的占位记录替换为真实session_id的记录:先调用
delete_item删除主键为999999999的条目,再调用不带条件的put_item写入真实session_id的条目即可。 - 仅需要修改999999999对应条目的非主键字段:改用
update_item接口,指定主键为999999999,仅更新count_1、count_2等非主键字段即可,不能修改主键session_id本身。
内容的提问来源于stack exchange,提问作者unacorn
相关产品推荐
相关产品推荐

