If I have a table with a hash key of userId and a range key of productId how do I put an item into that table only if it doesn\'t already exist using boto3\'s dynamodb bindi
The documentation for this unfortunately isn't super clear. I needed to accomplish something similar, and here's what worked for me, using boto3:
try:
table.put_item(
Item={
'foo':1,
'bar':2,
},
ConditionExpression='attribute_not_exists(foo) AND attribute_not_exists(bar)'
)
except botocore.exceptions.ClientError as e:
# Ignore the ConditionalCheckFailedException, bubble up
# other exceptions.
if e.response['Error']['Code'] != 'ConditionalCheckFailedException':
raise
Similar to the other answer, the key is in the attribute_not_exists function, but it was unclear to me initially how to get that to work. After some experimentation, I was able to get it going with the above.