如何解决Dynamodb和Boto3,在扫描中链接多个条件
我正在寻找一种在Dynamodb中创建带有多个“ {AND””条件的scan
条件的FilterExpression
请求的方法。
例如,我们可以使用以下条件扫描“水果”数据库:
criteria = {
'fruit': 'apple','color': 'green','taste': 'sweet'
}
我知道可以将它们连接成这样的字符串:
FilterExpression = ' AND '.join([f"{k}=:{k}" for k,v in criteria.items()])
ExpressionAttributeValues = {f":{k}": {'S': v} for k,v in criteria.items()}
但是,这似乎不是最优雅的/ pythonic方法。
解决方法
说实话,我认为您所拥有的东西虽然有限,但还算不错。如果您所做的非常简单,这可能是可以接受的。
如果您想使用一个库来充当DynamoDB的ORM,以便更轻松地使用自己的数据类集处理存储/检索数据,而无需将其转换为boto响应,您应该查看PynamoDB
,使用reduce
,可以实现以下行为:
from functools import reduce
from boto3.dynamodb.conditions import Key,And
FilterExpression=reduce(And,([Key(k).eq(v) for k,v in criteria.items()]))
希望这对您有用!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。