2 回答
TA贡献1780条经验 获得超5个赞
对于 DynamoDB,如果您想删除所有项目,最好的方法是删除并重新创建表,因为使用 boto3,每页的元素数限制为 1000 个。
使用 boto3 执行此操作的问题是昂贵的成本......每次删除都是一个写入请求。如果您不想支付不必要的费用(这是最好的方法),请删除并重新创建:)
顺便一提...
import boto3
def lambda_handler(event, context):
try:
flag = False
table_name = 'details'
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
scan = table.scan()
while !flag:
with table.batch_writer() as batch:
for each in scan['Items']:
batch.delete_item(
Key={
'id': each['id']
}
)
flag = True
except Exception as e:
print (e)
TA贡献1797条经验 获得超6个赞
由于编辑队列已满,我无法编辑已接受的答案。
查看代码,它只扫描并删除一次项目。
LastEvaluatedKey
这是使用密钥来确定是否需要重新扫描的工作代码。当扫描达到最大数据集大小限制 1 MB时,该键存在。
import boto3
def lambda_handler(event, context):
try:
table_name = 'details'
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
flag = True
while flag:
scan = table.scan()
print(f"Deleting {scan['ScannedCount']} records...")
flag = 'LastEvaluatedKey' in scan and scan['LastEvaluatedKey']
with table.batch_writer() as batch:
for each in scan['Items']:
batch.delete_item(
Key={
'id': each['id']
}
)
except Exception as e:
print(e)
添加回答
举报