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

如何用Python3在AWS中配置DynamoDB嵌套map属性的filter表达式

问题原因
  • 嵌套属性访问方式错误:DynamoDB 的 ExpressionAttributeNames 不支持直接传入带.的嵌套路径作为属性别名映射值,你当前的写法会被解析为查找**顶级属性名就是deliverables.fc986523-a666-478e-8303-2a1c3c1dc4ba**的字段,而非deliverables map下的对应key,自然匹配不到任何数据。
可行解决方案

方案1:修正原生client写法

调整属性别名映射规则,拆分嵌套层级,修正后的代码如下:

import boto3
result = []
dynamo_client = boto3.client("dynamodb")
paginator = dynamo_client.get_paginator("scan")

operation_parameters = {
    'FilterExpression': "#deliverables.#target_id = :deliverable",
    'ExpressionAttributeNames': {
        '#deliverables': 'deliverables',
        '#target_id': 'fc986523-a666-478e-8303-2a1c3c1dc4ba'
    },
    'ExpressionAttributeValues': {
        ':deliverable':  {
            "M": {
                "read": {"BOOL": True},
                "upload": {"BOOL": True},
                "write": {"BOOL": True}
            }
        }
    }
}
for page in paginator.paginate(TableName="TableName", **operation_parameters):
    result.extend(page["Items"]) # 用extend替代append避免结果嵌套多层数组

print(result)

方案2:改用boto3 resource客户端(更简洁)

无需手动声明DynamoDB类型标记,降低写法出错概率:

import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TableName')

scan_params = {
    'FilterExpression': "#deliverables.#target_id = :deliverable",
    'ExpressionAttributeNames': {
        '#deliverables': 'deliverables',
        '#target_id': 'fc986523-a666-478e-8303-2a1c3c1dc4ba'
    },
    'ExpressionAttributeValues': {
        ':deliverable': {
            "read": True,
            "upload": True,
            "write": True
        }
    }
}

result = []
while True:
    response = table.scan(**scan_params)
    result.extend(response['Items'])
    # 处理超过1MB的分页场景
    if 'LastEvaluatedKey' not in response:
        break
    scan_params['ExclusiveStartKey'] = response['LastEvaluatedKey']

print(result)

按照你提供的样例数据,修正后会正确返回username为username1的item,另一条upload和write为false的item会被过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:45:01