簡體   English   中英

使用 boto3 從沒有分區鍵的 dynamodb 進行掃描

[英]Scanning from dynamodb with out partition key using boto3

  • 我需要從 dynamodb 中提取與id, name, role匹配的項目

  • 以上 3 只是表的屬性,它們不是部分鍵或排序鍵

下面是代碼

import boto3
from boto3.dynamodb.conditions import Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('mytable')

def lambda_handler(event, context):
    response_list = []
    scan_response = table.scan(
        FilterExpression=Attr('id').eq(event['id']) & Attr(
        'name').eq(event['name']) & Attr(
        'role').eq('Manager')
    )
    response_list.extend(scan_response['Items'])
    while scan_response.get('LastEvaluatedKey'):
        scan_response = table.scan(
            FilterExpression=Attr('id').eq(event['id']) & Attr(
        'name').eq(event['name']) & Attr(
        'role').eq('Manager')
         )
         response_list.extend(scan_response['Items'])

    print( response_list)

我的循環僅在第一項上無限運行。 問題在哪里?

您沒有將LastEvaluatedKey傳遞給scan()調用,因此它每次都從頭開始掃描。

將其更改為:

while scan_response.get('LastEvaluatedKey'):
    scan_response = table.scan(
        ExclusiveStartKey=scan_response.get('LastEvaluatedKey'),
        FilterExpression=Attr('id').eq(event['id']) & Attr(
    'name').eq(event['name']) & Attr(
    'role').eq('Manager')
     )

暫無
暫無

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

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