【问题标题】:DynamoDB scan all items that meet conditionDynamoDB 扫描所有符合条件的项目
【发布时间】:2020-04-02 20:25:55
【问题描述】:

我有一个 DynamoDB 脚本。我扫描满足特定条件的项目。现在它可以工作了,但是对于有很多项目的表格,它似乎只打印了一些匹配的项目,而不是全部:

dynamodb = boto3.resource('dynamodb', region_name='eu-west-1')
table = dynamodb.Table(table)

# get items
fe = Attr('message').contains(filter)
get_response = table.scan(
    FilterExpression=fe
)

print(get_response)

但这并不是打印所有的项目。

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb boto3


    【解决方案1】:

    没有分页的scan方法会(根据docs),

    单个 Scan 操作最多读取设置的最大项目数(如果使用 Limit 参数)或最大 1 MB 数据,然后使用 FilterExpression 对结果应用任何过滤

    尝试使用scan paginator

    dynamodb = boto3.client('dynamodb')
    paginator = dynamodb.get_paginator('scan')
    
    response_iterator = paginator.paginate(
        TableName=table,
        FilterExpression='Message = :filter',
        ExpressionAttributeValues={
            ":filter": {
                "S": "some filter"
            }
        }
    )
    
    for response in response_iterator:
        print(response)
    
    

    FilterExpressionExpressionAttributeValues 将取决于您要查找的内容。查看docs了解更多详情

    【讨论】:

    • 谢谢,现在我尝试获取 Invalid type for parameter FilterExpression, value: , type: ,有效类型:
    • 您不能在分页器中使用Attr 对象。您需要手动构建 FilterExpression。这是一个非常烦人的 boto3 问题
    • 更新了关于 FilterExpression 的澄清答案
    • 谢谢,我尝试在需要包含的用例中理解它
    猜你喜欢
    • 2018-04-06
    • 2017-11-19
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多