2017-04-10 28 views
0

Complete scan of dynamoDb with boto3で説明されているように、いくつかの条件を使用してDynamoDBテーブルをフルスキャンするソリューションを構築します。これは私のコードです:DynamoDBスキャンの無限ループ

def dynamo_scan(table_name, params_dict): 
    dynamo_table = boto3.resource('dynamodb').Table(table_name) 
    response = do_scan(dynamo_table, params_dict) 
    results = response['Items'] 
    while response.get('LastEvaluatedKey'): 
     print "Iterating" 
     print response.get('LastEvaluatedKey') 
     params_dict['ExclusiveStartKey'] = response['LastEvaluatedKey'] 
     response = do_scan(dynamo_table, params_dict) 
     results.extend(response['Items']) 
    return results 

def do_scan(dynamo_table, params_dict): 
    return dynamo_table.scan(**params_dict) 

しかし、コードが実行されると、無限ループに入ります。これは、LastEvaluatedKeyの各繰り返しの出力です。

{u'my_id': u'1698', u'identity': u'2017075002312'} 
{u'my_id': u'1883', u'identity': u'85500397082900013318629'} 
{u'my_id': u'1698', u'identity': u'2017075002312'} 
{u'my_id': u'1883', u'identity': u'85500397082900013318629'} 
{u'my_id': u'1698', u'identity': u'2017075002312'} 
{u'my_id': u'1883', u'identity': u'85500397082900013318629'} 

そして、これらの2つのペアをループし続けます。

EDITED:

私はdo_scanメソッドを追加しました。

答えて

0

は、私はあなたのdo_scan()が正確に何をするかわからないんだけど、これは動作します:

def dynamo_scan(table_name, params_dict): 
    dynamo_table = boto3.resource('dynamodb').Table(table_name) 
    response = dynamo_table.scan(params_dict) 
    results = response['Items'] 

    while 'LastEvaluatedKey' in response: 
     response = dynamo_table.scan(ExclusiveStartKey=response['LastEvaluatedKey']) 
     results += response['Items'] 

    return results 
+0

はい、私は私の方法のdo_scanを追加しました。私はあなたと同じ解決策だと思いますが、私は毎回無限ループに陥ります。 –

+0

データベースにはどのくらいのデータがありますか? – Lexxxxx