为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2023-10-06 16:33:29
我的代码如下是从表名中删除内容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)
查看完整描述

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)


查看完整回答
反对 回复 2023-10-06
?
互换的青春

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)


查看完整回答
反对 回复 2023-10-06
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信