Python Dynamodb和Boto3,扫描中出现多个条件

Python Dynamodb和Boto3,扫描中出现多个条件,python,amazon-web-services,amazon-dynamodb,boto3,Python,Amazon Web Services,Amazon Dynamodb,Boto3,我正在寻找一种方法,在Dynamodb中创建一个带有多个filtereexpression条件“AND”的scan请求 例如,我们可以使用以下条件扫描“水果”数据库: criteria = { 'fruit': 'apple', 'color': 'green', 'taste': 'sweet' } 我知道这些可以连接成如下字符串: FilterExpression = ' AND '.join([f"{k}=:{k}" for k, v in criter

我正在寻找一种方法,在Dynamodb中创建一个带有多个
filtereexpression
条件“AND”的
scan
请求

例如,我们可以使用以下条件扫描“水果”数据库:

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()}

然而,这似乎不是最优雅/最具蟒蛇风格的方法。

说实话,我认为你的方法很好,尽管它非常有限。如果你所做的事情很简单,这可能是可以接受的


如果您想使用一个库作为DynamoDB的ORM进行排序,以便使用您自己的一组数据类更容易地存储/检索数据,而不需要在boto响应中转换数据,那么您应该使用
reduce
检查,可以实现此行为:

从functools导入reduce
从boto3.dynamodb.conditions导入键,以及
FilterExpression=reduce(And,([Key(k).eq(v)表示k,v表示criteria.items()]))
希望这对你有用