Skip to content

Instantly share code, notes, and snippets.

@pgolding
Created June 5, 2017 19:40
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • 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)
@glauesppen
Copy link

Thank you very much! As a newbie at DynamoDB, this saved my life!

@akmalff
Copy link

akmalff commented Jun 23, 2019

Big thank you, this really helps.

@kapilbaheti17
Copy link

Its great. Thanks a lot. Not implementing the while loop after the scan failed my script. Anyways it works now implementing this.

@vindard
Copy link

vindard commented Apr 11, 2020

Amazing, thanks! I was about to implement this in a much more verbose way by myself. Very clever to use json library to do the parsing 👌

@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