Skip to content

Instantly share code, notes, and snippets.

@quixoticmonk
Forked from pgolding/scan.py
Created February 11, 2021 18:08
Show Gist options
  • Select an option

  • Save quixoticmonk/1bab1b2af1e32e81b427c9d1a4bf4a9c to your computer and use it in GitHub Desktop.

Select an option

Save quixoticmonk/1bab1b2af1e32e81b427c9d1a4bf4a9c to your computer and use it in GitHub Desktop.

Revisions

  1. @pgolding pgolding created this gist Jun 5, 2017.
    48 changes: 48 additions & 0 deletions scan.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    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)