繁体   English   中英

如何使用 boto3 从 dynamodb 获取最后插入的项目?

[英]How to get the last inserted item from dynamodb using boto3?

我的 dynamodb 中有以下项目

entry    timestamp                        status    key
ent1     Fri Dec 04 11:26:17 EST 2020     Success   101
ent2     Fri Dec 04 11:26:18 EST 2020     Failure   102
ent3     Fri Dec 04 11:26:19 EST 2020     Success   101

在这里我只需要获取最后插入的状态=成功,即基于最新的时间戳- ent3

#预期的

ent3     Fri Dec 04 11:26:19 EST 2020     Success   101

使用以下代码时我没有看到结果返回

response=table.query(KeyConditionExpression= Key('key').eq('101'),
FilterExpression=Attr('status').eq('Success'))

那么如何从数据库中过滤/获取最后插入的项目?

谢谢

尝试更新您的代码以遵循以下格式:

table.query(
  KeyConditionExpression='#a = :a',
  ExpressionAttributeValues={
    ':a': '101',
    ':b': 'Success'
  },
  ExpressionAttributeNames={
    '#a': 'key',
    '#b': 'status'
  },
  FilterExpression='#a = :a AND #b= :b'
)

我没有使用您在上面使用的帮助程序,因为将您的方程作为字符串 arguments 传递更容易、更动态。 您还可以将“a”替换为更有意义的名称,以便于阅读。

编辑:我将两个示例混合在一起,因此此代码可能无法按原样工作,但重点是提供另一种实现目标的示例。

您可以添加一个全局二级索引(GSI),其status为分区键, timestamp为排序键,然后使用Limit=1查询该 GSI 以获取具有最新时间戳的项目。 如果您想要最早的时间戳,请将ScanIndexForward=false添加到您的查询中。

如果您需要特定分区中的最后数据,例如入口分区键中的 ent3,您可以尝试类似的方法

 response = dynamodb_client.query(TableName='TableName',
 KeyConditionExpression='#id =:id',
 ExpressionAttributeValues={
 ':id': {'S': 'ent3'}
 },
 ExpressionAttributeNames = {
 '#id':'entry'
 },
 Limit=1,ScanIndexForward=False)
 print(response['Items'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM