簡體   English   中英

未能遍歷列表以查詢 DynamoDB

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

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