我已经将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从表中获取最新的条目,那就好了。我刚刚将数据从浮点值编辑为整数值,现在它完美地为我提供了时间的整数值,但是当我使用浮点值进行同样的操作时,它给了我错误。它肯定与浮点和十进制有关
Dynamo不像RDMS那样工作
假设您的一条注释中提到的
RequestId
是表的哈希键,那么GetItem()和Query()只对RequestId起作用。您可以扫描()整个表以查找Time=4193082887.620961,但这将非常昂贵,因为整个表都将被读取您需要做的是设置一个Global Secondary Index (GSI),它使用时间作为散列键。现在,您可以查询()GSI以获得所需的记录
然而,您稍后的一条评论提到,您确实对添加最后一行感兴趣,但实际上不知道时间
在这种情况下,您不需要在GSI中使用时间作为散列键,而是需要一个伪散列键值并使用时间作为排序键。现在,只需使用hashkey和
"ScanIndexForward" = false
和'Limit=1'属性集查询GSI()这将为您提供最新的记录
相关问题 更多 >
编程相关推荐