2017-04-10 81 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