[英]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.