UpdateExpression принимает динамические значения для функции обновления в таблице DynamoDB с помощью boto3

Это вопрос из двух частей для первой части Обновление значение таблицы DynamoDB с реализованной лямбда-функцией boto3

теперь то, что я пытаюсь достичь, имеет динамическое значение для обновления

def lambda_handler(event, context):
    param = event['queryStringParameters']['employeID']
    name = event['queryStringParameters']['employeName']
    dynamodb = boto3.resource('dynamodb', region_name="us-east-1")
    table = dynamodb.Table('api_demo_employe')
    column = [cloumn1,cloumn2......]
    for i in range(0,len(column):

       query = 'SET {} = :f'.format(column[i])

       response = table.update_item(
           Key = {
               'employeID' : param
           },
           ExpressionAttributeValues = {
    
              ':f': name
          },
           UpdateExpression = query
    
          )

Я получаю сообщение об ошибке

 "errorMessage": "An error occurred (ValidationException) when calling the UpdateItem operation: One or more parameter values were invalid: Cannot update attribute employeID. This attribute is part of the key",

Я знаю, что проблема в том, как я обрабатываю UpdateExpression

Может ли кто-нибудь помочь мне с этим?


person sumanth shetty    schedule 06.08.2020    source источник


Ответы (1)


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

Дополнительные сведения см. В документации Amazon DynamoDB:

Вы не можете использовать UpdateItem для обновления каких-либо атрибутов первичного ключа. Вместо этого вам нужно будет удалить элемент, а затем использовать PutItem для создания нового элемента с новыми атрибутами.

person Dennis Traub    schedule 06.08.2020