Вставка параметров запроса в DynamoDB с помощью Boto3 - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь, чтобы мой сервер работал без функции, поскольку я пытаюсь это сделать.

Я пытаюсь выполнить метод API PUT, который будет интегрирован с лямбда-функцией прокси

У меня есть лямбда-функция, как показано ниже:

def lambda_handler(event, context):
    
    param = event['queryStringParameters']
    dynamodb = boto3.resource('dynamodb', region_name="us-east-1")
    table = dynamodb.Table('*****')
    
          
    response = table.put_item(
        Item = {



        }
        
    )

Я хочу вставить значение Param, которое я получаю из параметров запроса, в таблицу DynamoDB.

Я могу добиться этого с помощью:

response = table.put_item(
            Item = param 
)

Но проблема здесь в том, что если ключ раздела присутствует, он просто переопределяет значение вместо выдачи ошибки текущего ключа раздела.

Я знаю, что метод PUT - это идемпотент.

Есть ли другой способ добиться этого?

1 Ответ

0 голосов
/ 05 августа 2020

Per https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB .Client.put_item , вы можете:

"выполнить операцию условного помещения (добавить новый элемент, если элемент с указанным первичным ключом не работает) t exist) "

Примечание

Чтобы новый элемент не заменял существующий элемент, используйте условное выражение, которое содержит функцию attribute_not_exists с именем атрибута, являющимся используется как ключ раздела для таблицы. Поскольку каждая запись должна содержать этот атрибут, функция attribute_not_exists будет успешной только в том случае, если соответствующий элемент не существует.

Также см. DynamoDB: updateItem, только если он уже существует

Если вам действительно нужно знать, существует ли элемент или нет, чтобы вы могли вызвать логику исключения c, то сначала запустите запрос, чтобы увидеть, существует ли элемент уже, и даже не вызывайте put_item. Вы также можете изучить, может ли использование комбинации ConditionExpression и одного из параметров ReturnValues ​​(для put_item или update_item) вернуть достаточно данных, чтобы вы знали, существует ли элемент.

...