DynamoDB get_Item Python中的KeyError['Item']

2024-06-13 09:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将AWS Lambda连接到DynamoDB,没有任何连接问题。 每次更新数据库时,lambda Python代码都会运行。但是我在response['Item']中得到了一个关键错误。我已经阅读了文档,但都是一样的,我不明白为什么会出现错误。因为几乎每个网站上都有response['Item'],而且我的表也不是空的,它由该项组成。 问题特别针对浮点值而非整数值

from decimal import Decimal
from boto3.dynamodb.conditions import Key

import boto3
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('My table name')

def lambda_handler(event, context):
    
    response = table.get_item(
        Key = {

            "Time": Decimal(4193082887.620961)

        }
           )
    
    print(response['Item'])

lambda控制台中出现的错误是

[ERROR] KeyError: 'Item'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 26, in lambda_handler
    print(response['Item'])

实际上,我想要一个python程序,它将为我提供表的最新条目,但对于测试,它是从get项开始的。如果你能告诉我如何用python从表中获取最新的条目,那就好了。我刚刚将数据从浮点值编辑为整数值,现在它完美地为我提供了时间的整数值,但是当我使用浮点值进行同样的操作时,它给了我错误。它肯定与浮点和十进制有关


Tags: lambdakeyfromimportgetresponse错误table
1条回答
网友
1楼 · 发布于 2024-06-13 09:27:55

Dynamo不像RDMS那样工作

假设您的一条注释中提到的RequestId是表的哈希键,那么GetItem()和Query()只对RequestId起作用。您可以扫描()整个表以查找Time=4193082887.620961,但这将非常昂贵,因为整个表都将被读取

您需要做的是设置一个Global Secondary Index (GSI),它使用时间作为散列键。现在,您可以查询()GSI以获得所需的记录

然而,您稍后的一条评论提到,您确实对添加最后一行感兴趣,但实际上不知道时间

在这种情况下,您不需要在GSI中使用时间作为散列键,而是需要一个伪散列键值并使用时间作为排序键。现在,只需使用hashkey和"ScanIndexForward" = false和'Limit=1'属性集查询GSI()

这将为您提供最新的记录

相关问题 更多 >