首页 > 解决方案 > 如何使用 AWS lambda 从 Dynamo DB 中检索多个项目

问题描述

如何从数据库中获取多个项目。下面的代码给我一个错误,因为它只获取一个项目。我正在根据电子邮件值检索项目。

import json
import os
import boto3
import decimalencoder

dynamodb = boto3.resource('dynamodb')


def get(event, context):
    table = dynamodb.Table(os.environ['DYNAMODB_TABLE'])

    # fetch a person from the database
    result = table.get_item(
        Key={
            'email': event['pathParameters']['email']
        }
    )

    # create a response
    response = {
        "statusCode": 200,
        "body": json.dumps(result['Item'], cls=decimalencoder.DecimalEncoder),
        "headers": {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Credentials": "true"
        }
    }

    return response

标签: amazon-web-servicesaws-lambdaamazon-dynamodbboto3

解决方案


要从 db 中检索多行,首先查询要过滤数据的 id。然后维护一个列表以将所有行值存储在其中。

def lambda_handler(event,context):

    item = table.query(
              KeyConditionExpression=Key('hubID').eq(hubId)
           )

    if (item["Count"] == 0):
        response = {"msg": "Item not exist, can't perform READ"}

    else:
        i = 1
        lst = []
        while i < item["Count"]:

            response = {                          
                        "hubId" : item["Items"][i]["hubID"],
                        "deviceState": int(item["Items"][i]["deviceState"]),
                        "deviceId": item["Items"][i]["deviceID"],
                        "deviceType": item["Items"][i]["deviceType"],
                        "intensity": int(item["Items"][i]["intensity"])
                        }
            lst.append(response)
            i += 1
        print(lst) 

        response = lst

return response

推荐阅读