仅当属性值不存在时,我才想在 dynamodb 中插入记录。
try:
NewsTable.put_item(
Item={
"PK": "intentional_id_to_check_failing_of_ConditionExpression",
"SK": f"news#id#{uuid.uuid4().hex}",
"model_type": "TEST_MODEL",
"title": "dummy_title_1",
"timestamp": Decimal(str(datetime.now().timestamp())),
},
ConditionExpression="attribute_not_exists(PK)",
)
except resource.meta.client.exceptions.ConditionalCheckFailedException as e:
print(e)
我尝试过的更多代码:
pk = "intentional_id_to_check_failing_of_ConditionExpression"
try:
NewsTable.put_item(
Item={
"PK": pk,
"SK": f"news#id#{uuid.uuid4().hex}",
"model_type": "TEST_MODEL",
"title": "dummy_title_1",
"timestamp": Decimal(str(datetime.now().timestamp())),
},
ConditionExpression=Attr("PK").ne(pk),
)
except resource.meta.client.exceptions.ConditionalCheckFailedException as e:
print(e)
这里我使用 Attr 且条件不相等
如果您的主键同时包含 PK 和 SK,那么您需要根据 DynamoDB 开发者指南文档检查这两个值是否评估为 true 或 false。
以下示例在尝试写入操作之前使用 attribute_not_exists() 检查表中是否存在主键。
如果您的主键包含 PK 和 SK 正如我上面提到的,这个短语可能与您的情况有关。
注意 如果您的主键同时包含分区键 (pk) 和排序键 (sk),则该参数将在尝试写入操作之前检查 attribute_not_exists(pk) 和 attribute_not_exists(sk) 的计算结果是否为 true 或 false。
这意味着,您可以根据需要在查询中使用
Logial operators
或 AND
或 OR
。请参阅以下 DynamoDB API 参考文档中的
ConditionExpression
详细信息。