элемент условного обновления Dynamodb (клиент)

Dec 09 2020

Я имею в виду этот образец обновления: https://stackoverflow.com/a/62030403/13967222.


    for key, val in body.items():
        update_expression.append(f" {key} = :{key},")
        update_values[f":{key}"] = val

    return "".join(update_expression)[:-1], update_values

Я пытаюсь добиться того же, но с помощью клиента Dynamodb.

Есть ли способ добавить проверку, доступно ли значение с помощью клиента Dynamodb?

Ответы

1 FireNero Dec 09 2020 at 17:58

Вы можете проверить, существует ли уже ключевой атрибут, передавая ConditionExpressionпараметр в таком запросе (на основе ответа в ответе, на который вы ссылаетесь):

table.update_item(
        Key={'uuid':str(uuid)},
        UpdateExpression=a,
        ExpressionAttributeValues=dict(v),
        ConditionExpression="attribute_not_exists(uuid)"
        )

Ваша запись будет выполнена только при ConditionExpressionвозврате True. attribute_not_exists- это функция DynamoDb, которая возвращается, Trueкогда указанный атрибут не существует. Также есть attribute_existsфункция для достижения противоположного результата. Подробнее о функциях условия DDB в официальной документации

Кроме того, вы можете проверить пример условной записи Python в документации здесь