当DynamoDB中不存在项时,如何使用Python(boto3)强制delete_项返回错误?

当DynamoDB中不存在项时,如何使用Python(boto3)强制delete_项返回错误?,python,python-3.x,amazon-dynamodb,boto3,Python,Python 3.x,Amazon Dynamodb,Boto3,默认情况下,即使对不存在的项执行操作,从boto3删除_项也不会返回错误 id = '123' timenow = '1589046426' dynamodb = boto3.resource('dynamodb') boto3_table = dynamodb.Table(MY_TABLE) response = boto3_table.delete_item(Key={"ID": id, "TIMENOW": timenow}) 当项目不存在时,如何更改上面的代码以强制删除项目返回错误?

默认情况下,即使对不存在的项执行操作,从boto3删除_项也不会返回错误

id = '123'
timenow = '1589046426'

dynamodb = boto3.resource('dynamodb')
boto3_table = dynamodb.Table(MY_TABLE)
response = boto3_table.delete_item(Key={"ID": id, "TIMENOW": timenow})

当项目不存在时,如何更改上面的代码以强制删除项目返回错误?

如果有人有相同的问题,以下是解决方案:

response = boto3_table.delete_item(Key={"IDID": idid, "TIMENOW": timenow},
           ConditionExpression="attribute_exists(ID) AND attribute_exists(TIMENOW)")

仅当记录中存在ID和TIMENOW时,属性为_exists的ConditionExpression参数才会删除

如果有人有同样的问题,以下是解决方案:

response = boto3_table.delete_item(Key={"IDID": idid, "TIMENOW": timenow},
           ConditionExpression="attribute_exists(ID) AND attribute_exists(TIMENOW)")
仅当记录中存在ID和TIMENOW时,属性为_exists的ConditionExpression参数才会删除

一种方法是在分区键属性名称上使用:

response = table.delete_item(
    Key={
        'pk': "jim.bob",
        "sk": "metadata"
    },
    ConditionExpression="attribute_exists (pk)",
)
如果该项与该键一起存在,并且该键上存在作为分区键的属性,则会删除该项。如果该项目不存在,则您将获得:

The conditional request failed
一种方法是在分区键属性名称上使用:

response = table.delete_item(
    Key={
        'pk': "jim.bob",
        "sk": "metadata"
    },
    ConditionExpression="attribute_exists (pk)",
)
如果该项与该键一起存在,并且该键上存在作为分区键的属性,则会删除该项。如果该项目不存在,则您将获得:

The conditional request failed

另一种方法是使用
ReturnValues='ALL_OLD'
,它返回与给定键相关的属性(如果它们在删除之前存在):

response=boto3_表。删除_项(Key={“ID”:ID,“TIMENOW”:TIMENOW},ReturnValues='ALL_OLD')
如果不是res['Attributes']:
raise KeyError('未找到项!')

另一种方法是使用
ReturnValues='ALL_OLD'
返回与给定键关联的属性(如果它们在删除之前存在):

response=boto3_表。删除_项(Key={“ID”:ID,“TIMENOW”:TIMENOW},ReturnValues='ALL_OLD')
如果不是res['Attributes']:
raise KeyError('未找到项!')

不错。你回答自己的问题比我快了一分钟。:-)我仍然点击了你的答案。谢谢你的帮助,很好。你回答自己的问题比我快了一分钟。:-)我仍然点击了你的答案。谢谢你的帮助。