Skip to content

Instantly share code, notes, and snippets.

@nextwebb
Forked from pgolding/scan.py
Created December 15, 2022 00:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nextwebb/99c6e4b4cbe6ee9caceb5e0708f46b08 to your computer and use it in GitHub Desktop.
Save nextwebb/99c6e4b4cbe6ee9caceb5e0708f46b08 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment