[英]failing to iterate over list for querying DynamoDB
我正在嘗試查詢遍歷列表的 DynamoDB,但它失敗了。 我的意思是返回空的 JSON。 如果我使用單個 id 運行查詢,我可以獲取數據。 我正在從文件中獲取數據到列表中。 下面是我的循環代碼:
with open('file.txt') as f:
resid = f.read().splitlines()
for id in resid:
result = table.query(
IndexName="partner_resid-index",
KeyConditionExpression=Key("id").eq(partner_resid[0]),
FilterExpression=Key("event").eq("active"),
)
print(result)
即使我嘗試使用 function 打電話,但沒有運氣。 有什么建議我在這里缺少嗎?
boto3 query
function只返回單頁查詢結果。 您必須檢查此結果是否有LastEvaluatedKey
,如果有,請發送另一個查詢,將ExclusiveStartKey
設置為最后一個LastEvaluatedKey
,並繼續執行此操作,直到您獲得最后一頁,但沒有設置LastEvaluatedKey
。
問題是,如果您的FilterExpression
過濾掉了很多結果,您甚至可能會得到一個空頁面 - 這可能是您看到的空結果。 請注意,DynamoDB 首先讀取一個充滿數據的頁面(默認情況下,1MB 數據),然后才對其應用FilterExpression
。 如果所有這些結果都與過濾器不匹配,則可能會返回一個空白頁面,並且您仍然需要繼續循環到下一頁。
或者,您可以使用 boto3 的paginator
機制。 它的用法如下:
got_items = []
paginator = dynamodb.meta.client.get_paginator('query')
for page in paginator.paginate(TableName='name', KeyConditionExpression=...):
got_items += page['Items']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.