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

如何在Python中生成含多排序键的DynamoDB BatchGetItem Keys数组

解决Boto3 BatchGetItem生成含多排序键Keys数组的问题

问题背景

使用Python的Boto3调用DynamoDB的BatchGetItem接口时,针对带排序键的表(如SortedKeyBossTable),需要为每个id生成两个不同排序键的条目,但之前的写法无法生成合法的JSON结构,导致执行失败。此前处理无排序键表时的逻辑如下,运行正常:

填充Keys节点的代码:

{
    DYNAMODB_TABLE: {
        'Keys': generate_keydicts(myids, table_name)
    }
}

对应辅助函数:

if table_to_query == 'BossTable':
    return [{'id': myid} for myid in myids]

尝试的错误写法:

if table_to_query == 'SortedKeyBossTable':
    keys = []
    for myid in myids:
          single_key = {{'id': myid},{"sortkey":"sortkey1"}, 
                        {'id': myid},{"sortkey":"sortkey2"}}
    keys.append(single_key)
    return keys

该写法生成的结构不合法,无法被DynamoDB识别。

解决方案

DynamoDB的Keys数组要求每个元素是包含主键和排序键的完整字典,每个主键+排序键的组合对应一个单独的字典条目。正确的批量生成方式是遍历每个id,为每个排序键创建一个独立的字典,然后添加到列表中。

修改后的辅助函数:

if table_to_query == 'SortedKeyBossTable':
    keys = []
    # 定义需要的排序键值列表
    sort_keys = ["sortkey1", "sortkey2"]
    for myid in myids:
        # 为当前id的每个排序键生成一个完整的键字典
        for sk in sort_keys:
            keys.append({'id': myid, 'sortkey': sk})
    return keys

说明

  • 该逻辑会为每个id生成2个条目,2000个ID最终会生成4000个键字典(注意:BatchGetItem单次请求最多支持100个键,若超过需要拆分请求,不过这是独立于键生成的额外逻辑)
  • 生成的列表结构符合DynamoDB要求,示例输出如下(假设myids = ["id1", "id2"]):
[
    {'id': 'id1', 'sortkey': 'sortkey1'},
    {'id': 'id1', 'sortkey': 'sortkey2'},
    {'id': 'id2', 'sortkey': 'sortkey1'},
    {'id': 'id2', 'sortkey': 'sortkey2'}
]

这个结构是合法的JSON数组,能被BatchGetItem接口正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:25:12