dynamodb如何只按排序键查询?

时间:2017-02-21 15:26:30

标签: amazon-web-services amazon-dynamodb boto3

我编写了一些python代码,我想通过sort键查询dynamoDB数据。 我记得我可以成功使用后续代码:

 table.query(KeyConditionExpression=Key('event_status').eq(event_status))

我的表格结构列

primary key:event_id
sort key: event_status

4 个答案:

答案 0 :(得分:4)

如果您想在不使用Hash Key属性值的情况下从DynamoDB获取数据,则应使用扫描API。

示例: -

fe = Attr('event_status').eq("new");

response = table.scan(
        FilterExpression=fe        
    )

for i in response['Items']:

print(json.dumps(i, cls=DecimalEncoder))

while 'LastEvaluatedKey' in response:
    response = table.scan(        
        FilterExpression=fe,        
        ExclusiveStartKey=response['LastEvaluatedKey']
        )

    for i in response['Items']:
        print(json.dumps(i, cls=DecimalEncoder))

答案 1 :(得分:3)

您必须为sort键创建一个二级索引,以便单独查询。

答案 2 :(得分:0)

通过使用FilterExpression,我们可以使用Sort键扫描表格

注意::此处 LastUpdated 是排序键

示例:

from_date = "fromdate"
to_date = "todate"

dynamodb = boto3.resource('dynamodb', region_name='ap-south-1')
table = dynamodb.Table("your-tablename")
response =table.scan(
    FilterExpression=Attr('LastUpdated').between(from_date,to_date))
    )
result = response['Items']

答案 3 :(得分:0)

dynamodb中的查询只能使用主键完成

dynamodb = boto3.resource('dynamodb', region_name='your region name')
table = dynamodb.Table('database-dev')
response = table.query(KeyConditionExpression=Key('your primary key').eq("condition"))

但是,如果您的主键同时包含哈希键和排序键,那么我们可以像这样使用哈希键

dynamodb = boto3.resource('dynamodb', region_name='your region name')
table = dynamodb.Table('database-dev')
response = table.query(KeyConditionExpression=Key('your primary key').eq("condition"))