2017-04-10 83 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'} 

而且它通過這兩對繼續循環。

編輯:

我添加了方法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