使用Python调用DynamoDB GetItem报错:键元素与架构不匹配
问题原因及解决办法
你犯了一个关键错误:get_item方法**仅支持通过表的主键(分区键+可选排序键)**查询数据,不管你有没有创建全局索引,这个方法都不会使用索引。你传入的player_id和type不是表的主键,所以必然报错。
要利用全局索引查询,你需要改用query方法,同时指定索引名称,并且按照索引的键结构编写查询条件。假设你的全局索引是以player_id作为分区键、type作为排序键创建的,修改后的代码如下:
response = table.query( IndexName='你的全局索引名称', # 替换成你实际创建的索引名 KeyConditionExpression=Key('player_id').eq(22892251) & Key('type').eq(1) ) items = response['Items'] if items: print(items[0]) # 因为是唯一组合,取第一个结果即可 else: print("未找到匹配数据")
额外说明
- 如果你用的全局索引只把
player_id作为分区键,type是投影属性,那KeyConditionExpression只能指定player_id,然后用FilterExpression过滤type,但这种方式效率不如把type设为索引排序键高。 - 如果
player_id+type的组合是全局唯一的,也可以考虑将它们设为表的复合主键,但这需要修改表结构,适合新表或能接受数据迁移的场景。
内容的提问来源于stack exchange,提问作者Pregz
相关产品推荐
相关产品推荐

