如何使用 Python 扫描 dynamoDB 表以查找特定密钥



我正在尝试扫描列名为 S3KeyID 的值,并且正在寻找值"newkey"。
当我在测试中运行它时,它会扫描 dynamoDB 表中的所有 3 个项目,并找到 3 个结果并且没有匹配项。

import boto3
import json
import decimal
import calendar
import datetime
from boto3.dynamodb.conditions import Key, Attr
def lambda_handler(event, context):
    StartDateTime = datetime.datetime.now() - datetime.timedelta(minutes=10000)
    EndDateTime = datetime.datetime.now()

    # Helper class to convert a DynamoDB item to JSON.
    class DecimalEncoder(json.JSONEncoder):
        def default(self, o):
            if isinstance(o, decimal.Decimal):
                return str(o)
            return super(DecimalEncoder, self).default(o)
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Overwatch')
    print("Overwatch old messages")
    response = table.scan(
            #ExpressionAttributeNames = {'ST' : 'S3KeyID'},
            FilterExpression = "S3KeyID = :key",
            ExpressionAttributeValues =
            {   #":dateStart": {"S": StartDateTime},
                #":dateEnd": {"S": EndDateTime},
                ":key" : {"S" : "newkey"}
    #            ":S3KeyID : 1222433"
            }
            #ProjectionExpression="S3KeyID"
    )
    for i in response[u'Items']:
        print(json.dumps(i, cls=DecimalEncoder))
    return response

查看结果:

Items": [],
  "Count": 0,
  "ScannedCount": 3,

我想效果更好:

response = table.scan(
    FilterExpression = Attr('S3KeyID').eq('newkey')
)

阅读文档以获取更多示例。这是我的灵感:

同样,您可以根据项目的属性扫描表。例如,这将扫描年龄小于 27 岁的所有用户:

response = table.scan(
    FilterExpression=Attr('age').lt(27)
)
items = response['Items']
print(items)

最新更新