Amazon web services dynamodb如何仅通过排序键进行查询?
我已经编写了一些python代码,我想通过排序键查询dynamoDB数据。 我记得我可以成功使用后续代码:Amazon web services dynamodb如何仅通过排序键进行查询?,amazon-web-services,amazon-dynamodb,boto3,Amazon Web Services,Amazon Dynamodb,Boto3,我已经编写了一些python代码,我想通过排序键查询dynamoDB数据。 我记得我可以成功使用后续代码: table.query(KeyConditionExpression=Key('event_status').eq(event_status)) “我的表结构”列 primary key:event_id sort key: event_status 如果您希望从DynamoDB获取数据而不使用Hash Key属性值,那么应该使用scan API 示例:- fe = Attr('ev
table.query(KeyConditionExpression=Key('event_status').eq(event_status))
“我的表结构”列
primary key:event_id
sort key: event_status
如果您希望从DynamoDB获取数据而不使用Hash Key属性值,那么应该使用scan 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))
您必须为排序键创建全局二级索引(GSI),以便单独对其进行查询。通过使用FilterExpression,我们可以使用排序键扫描表 注意:此处last updated是排序键 例如:
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']
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 hash key').eq("condition"))
请注意,扫描与查询不同。您将对所有值进行迭代,因此它的效率远远低于查询。如果您确实需要对<代码>事件-状态> /代码>进行有效的查询,您应该考虑为该字段创建一个GSI。这是不正确的,需要创建GSI,不能单独查询排序关键字。LSI是一个额外的LSI@Madeo,我试图编辑答案并更正它。这两段代码都是相同的!您的答案文本表明它们应该不同?请小心,这只会过滤从原始查询返回的1MB数据。来自文档:“在查询完成后,但在返回结果之前应用筛选表达式”