Skip to content

Instantly share code, notes, and snippets.

@pgolding
Created June 5, 2017 19:40
Show Gist options
  • Save pgolding/f847f33e5628a8c936eac60ca4169d86 to your computer and use it in GitHub Desktop.
Save pgolding/f847f33e5628a8c936eac60ca4169d86 to your computer and use it in GitHub Desktop.
scan all elements from a dynamodb table using Python (boto3)
from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb') # may require parameters if not using default AWS environment vars
table = dynamodb.Table('Movies')
fe = Key('year').between(1950, 1959);
pe = "#yr, title, info.rating"
# Expression Attribute Names for Projection Expression only.
ean = { "#yr": "year", } # aliases for reserved keywords
# http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
esk = None
response = table.scan(
FilterExpression=fe,
ProjectionExpression=pe,
ExpressionAttributeNames=ean
)
for i in response['Items']:
print(json.dumps(i, cls=DecimalEncoder))
# or do something else, like items.append(i)
while 'LastEvaluatedKey' in response:
response = table.scan(
ProjectionExpression=pe,
FilterExpression=fe,
ExpressionAttributeNames= ean,
ExclusiveStartKey=response['LastEvaluatedKey']
)
for i in response['Items']:
print(json.dumps(i, cls=DecimalEncoder))
# or do something else, like items.append(i)
@xai1983kbu
Copy link

Thank you!
Why do we need to use while loop?
Answer - https://stackoverflow.com/a/52757046/9783262

@haahuja
Copy link

haahuja commented Dec 14, 2020

Thank you so much. It worked great.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment