簡體   English   中英

Dynamodb 和 Boto3,在掃描中鏈接多個條件

[英]Dynamodb and Boto3, Chain Multiple Conditions in Scan

我正在尋找一種在 Dynamodb 中創建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()]))

希望這對你有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM