Reputation: 119
As explained in Complete scan of dynamoDb with boto3 I build a solution to full scan a DynamoDB table using some condition. This is my code:
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)
But when the code is executed it gets into an infinite loop. This is the output for the each iteration of 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'}
And it keeps looping trough those two pairs.
EDITED:
I added the method do_scan.
Upvotes: 0
Views: 2201
Reputation: 273
I'm not sure what your do_scan()
does exactly, but this works:
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
Upvotes: 2