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

为何DynamoDB中KeyConditionExpression可用但get_item报错?

解答DynamoDB query与get_item的差异及报错问题

1. 为何相同键参数下query能工作,get_item报错?

DynamoDB的query和get_item对主键的要求完全不同:

  • query是基于主键的条件查询:只要你提供的键匹配分区键(如果是复合主键,也可搭配排序键做范围查询),就能返回对应分区内的所有匹配项。哪怕只传了分区键、没传排序键(若表有排序键),query也能正常执行,返回该分区下的所有数据。
  • get_item是精准获取单条数据:要求你必须提供完整的主键集合——如果表是单主键(仅分区键),只传分区键即可;如果是复合主键(分区键+排序键),必须同时传入这两个键的名称和对应值,少任何一个都会触发ValidationException,因为不符合表的主键schema。

你遇到的情况,大概率是表用了复合主键,而你在get_item里只传了分区键、没传排序键,但query仅需分区键就能执行,所以两者表现不同。

2. get_item方法能否正常运行?

完全可以,但必须严格按照表的主键定义传参。举个Python(boto3)的示例:

  • 若表的主键是单分区键user_id:
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('your-table-name')

response = table.get_item(
    Key={
        'user_id': '12345'
    }
)
  • 若表是复合主键(分区键user_id + 排序键order_id):
response = table.get_item(
    Key={
        'user_id': '12345',
        'order_id': '67890'
    }
)

只要保证Key字典包含了表主键的所有属性,get_item就能正常返回对应的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:03