如果我有一个带有 userId 哈希键和 productId 范围键的表,我如何使用 boto3 的 dynamodb 绑定(bind)将一个项目放入该表中?
对 put_item 的正常调用如下所示
table.put_item(Item={'userId': 1, 'productId': 2})
我的 ConditionExpression 调用如下所示:
table.put_item(
Item={'userId': 1, 'productId': 2},
ConditionExpression='userId <> :uid AND productId <> :pid',
ExpressionAttributeValues={':uid': 1, ':pid': 3}
)
但这每次都会引发 ConditionalCheckFailedException。是否存在具有相同 productId 的项目。
最佳答案
不幸的是,这方面的文档不是很清楚。我需要完成类似的事情,这对我有用,使用 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
与另一个答案类似,关键在于 attribute_not_exists 函数,但我最初不清楚如何让它工作。经过一些实验,我能够按照上述方式进行操作。
关于python - 如何使用 boto3 有条件地将项目插入 dynamodb 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053595/