使用boto3从不带分区键的dynamodb扫描
Scanning from dynamodb with out partition key using boto3
我需要从匹配 id, name, role
的 dynamodb 中提取项目
以上 3 只是 table 的属性,它们不是部分键或排序键
下面是代码
import boto3
from boto3.dynamodb.conditions import Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('mytable')
def lambda_handler(event, context):
response_list = []
scan_response = table.scan(
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)
response_list.extend(scan_response['Items'])
while scan_response.get('LastEvaluatedKey'):
scan_response = table.scan(
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)
response_list.extend(scan_response['Items'])
print( response_list)
我的循环 运行 只在第一项上无限循环。问题出在哪里?
您没有将 LastEvaluatedKey
传递给 scan()
调用,因此它每次都从头开始扫描。
改成这样:
while scan_response.get('LastEvaluatedKey'):
scan_response = table.scan(
ExclusiveStartKey=scan_response.get('LastEvaluatedKey'),
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)
我需要从匹配
的 dynamodb 中提取项目id, name, role
以上 3 只是 table 的属性,它们不是部分键或排序键
下面是代码
import boto3
from boto3.dynamodb.conditions import Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('mytable')
def lambda_handler(event, context):
response_list = []
scan_response = table.scan(
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)
response_list.extend(scan_response['Items'])
while scan_response.get('LastEvaluatedKey'):
scan_response = table.scan(
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)
response_list.extend(scan_response['Items'])
print( response_list)
我的循环 运行 只在第一项上无限循环。问题出在哪里?
您没有将 LastEvaluatedKey
传递给 scan()
调用,因此它每次都从头开始扫描。
改成这样:
while scan_response.get('LastEvaluatedKey'):
scan_response = table.scan(
ExclusiveStartKey=scan_response.get('LastEvaluatedKey'),
FilterExpression=Attr('id').eq(event['id']) & Attr(
'name').eq(event['name']) & Attr(
'role').eq('Manager')
)