Вот ответ, который учитывает тот факт, что вы можете не получить все записи обратно при первом вызове, если вы пытаетесь усечь большую таблицу (или меньшую таблицу с большими элементами). Предполагается, что вы используете только HashKey (называемый id
), поэтому вам придется добавить бит к вашим вызовам ProjectionExpression
и delete_item
, если у вас также есть SortKey на вашем столе.
Там есть кое-что еще, что вы можете вырезать, просто печатая счетчик на стандартный вывод, чтобы мы, люди, были счастливы.
import boto3
table = boto3.resource('dynamodb').Table('my-table-name')
scan = None
with table.batch_writer() as batch:
count = 0
while scan is None or 'LastEvaluatedKey' in scan:
if scan is not None and 'LastEvaluatedKey' in scan:
scan = table.scan(
ProjectionExpression='id',
ExclusiveStartKey=scan['LastEvaluatedKey'],
)
else:
scan = table.scan(ProjectionExpression='id')
for item in scan['Items']:
if count % 5000 == 0:
print(count)
batch.delete_item(Key={'id': item['id']})
count = count + 1