【问题标题】:Add limit in Lambda DynamoDB function在 Lambda DynamoDB 函数中添加限制
【发布时间】:2020-10-05 06:37:23
【问题描述】:

我需要限制查询返回的结果数

我的 lambda 函数是

import json
import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')

def lambda_handler(event, context):
    response = table.scan(
        FilterExpression=Attr('name').eq('test')
    )
    items = response['Items']
    return items

请帮助我如何限制返回结果的数量

【问题讨论】:

    标签: python amazon-dynamodb scanf limit


    【解决方案1】:

    你可以试试分页。

    import boto3
    
    
    def lambda_handler(event, context):
        client = boto3.client('dynamodb')
        paginator = client.get_paginator('scan')
        operation_parameters = {
          'TableName': 'foo',
          'FilterExpression': 'foo > :x',
          'ExpressionAttributeValues': {}
        }
    
        page_iterator = paginator.paginate(**operation_parameters)
        for page in page_iterator:
            # do something
    

    boto3 sourcesource2

    如果您只想限制技术,请查看此解决方案,但它使用查询方法而不是扫描。

    def full_query(table, **kwargs):
        response = table.query(**kwargs)
        items = response['Items']
        while 'LastEvaluatedKey' in response:
            response = table.query(ExclusiveStartKey=response['LastEvaluatedKey'], **kwards)
            items.extend(response['Items'])
        return items
    
    full_query(Limit=37, KeyConditions={...})
    

    来源:https://stackoverflow.com/a/56468281/9592801

    【讨论】:

    • 感谢您的回复,您能告诉我如何使用上面的过滤器表达式,因为我不能使用 key 并且需要使用 attr 并且它可以在查询中使用任意数量的属性。例如 FilterExpression=Attr('name').eq('test') & Attr('created_at').lt('2020-01-01T00:00:00')
    猜你喜欢
    • 2019-07-02
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2017-01-02
    • 2020-01-08
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多