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

如何使用Python通过Hash Key从DynamoDB表检索数据

DynamoDB Python 按Hash Key查询数据正确写法

你代码调用失败的核心原因是传入get_item接口的Key参数格式不符合要求。

核心规则说明

  • get_item接口仅用于查询单条完整主键匹配的数据:如果你的表只设置了Hash Key(分区键)作为主键,仅传Hash Key即可;如果表是Hash Key+Range Key(排序键)的复合主键,必须同时传入两个键的取值,否则会调用报错。
  • 你当前使用的是boto3.client('dynamodb')低级别客户端,所有传入的键值、返回的结果都遵循DynamoDB的原生类型标注格式,不能直接传入普通Python值。

低级别Client正确写法

Key参数需要传入字典,结构为{字段名: {类型标识: 值}},常见类型标识对应关系:

  • 字符串:'S',值为Python字符串
  • 数字:'N',值需要转成字符串类型传入
  • 二进制:'B',值为Python bytes类型

完整示例代码

import boto3

table_name = 'Waypoints'
dynamodb_client = boto3.client('dynamodb')

# 请替换为你实际的Hash Key字段名、类型、待查询值
# 示例中Hash Key字段为waypoint_id,类型为字符串,查询值为"wp_1001"
response = dynamodb_client.get_item(
    TableName=table_name,
    Key={
        'waypoint_id': {'S': 'wp_1001'}
    }
)

# 提取查询结果,无匹配数据时response中不会有Item字段
target_item = response.get('Item')
if target_item:
    # 返回结果同样带类型标注,例如取name字段的字符串值写法为target_item['name']['S']
    print("查询结果:", target_item)
else:
    print("无匹配数据")

常见场景补充

  • 如果你需要查询同一个Hash Key下的多条数据(一般是带排序键的表),不能用get_item,改用query接口:
# 查询Hash Key为wp_1001的所有数据
response = dynamodb_client.query(
    TableName=table_name,
    KeyConditionExpression='waypoint_id = :hash_value',
    ExpressionAttributeValues={
        ':hash_value': {'S': 'wp_1001'}
    }
)
all_items = response.get('Items', [])
  • 如果你不想手动处理类型标注,可以改用boto3的Table资源,它会自动完成Python类型和DynamoDB类型的转换,写法更简洁:
dynamodb_resource = boto3.resource('dynamodb')
table = dynamodb_resource.Table(table_name)
# 直接传普通Python值即可,无需写类型标识
response = table.get_item(Key={'waypoint_id': 'wp_1001'})
target_item = response.get('Item')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:03:34