猿问

如何使用boto3删除dynamodb中的所有项目

我的代码如下是从表名中删除内容details


下面的代码将根据Capacitydynamodb 删除一些项目,该项目工作正常

如何删除所有项目

    import boto3

    def lambda_handler(event, context):

        try:

            table_name = 'details'

            dynamodb = boto3.resource('dynamodb')

            table = dynamodb.Table(table_name)

            scan = table.scan()

            with table.batch_writer() as batch:

                for each in scan['Items']:

                    batch.delete_item(

                        Key={

                            'id': each['id']

                        }

                    )

        except Exception as e:

           print (e)

while我用带有标志条件的循环编写。


   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 True:

                with table.batch_writer() as batch:

                    for each in scan['Items']:

                        if each is not None:

                            batch.delete_item(

                                 Key={

                                 'id': each['id']

                                 }

                             )

                         else:

                            Flag = True

        except Exception as e:

           print (e)


汪汪一只猫
浏览 103回答 2
2回答

翻阅古今

对于 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)

互换的青春

由于编辑队列已满,我无法编辑已接受的答案。查看代码,它只扫描并删除一次项目。LastEvaluatedKey这是使用密钥来确定是否需要重新扫描的工作代码。当扫描达到最大数据集大小限制 1 MB时,该键存在。import boto3def 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答