AWS Dynamodb - использовать Upsert python - PullRequest
0 голосов
/ 31 марта 2020

Я использовал putitem для вставки json в DynamodB в моей лямбде. Это работает нормально, но могут быть случаи, когда я хочу сделать частичные обновления - и обновлять только те части Json, которые изменились или являются новыми.

, например:

{ 
  fruits:
   {
      apple:
        {
          color: green
        }
       orange:
       {
         color: orange
       }
    }
}

Я мог бы тогда хотеть отправить обновление как это:

{ 
  fruits:
   {
      apple:
        {
          color: red
        }
    }
}

В идеале, это должно только изменить Json на это:

{ 
  fruits:
   {
      apple:
        {
          color: red
        }
       orange:
       {
         color: orange
       }
    }
}

Вот мой текущий код:

data = json.loads(event['body'])
table.put_item(Item=data)

У меня, например, ключ раздела my_id.

Я пробовал это:

            table.update_item(
                Key = { 'my_id': my_id },
                UpdateExpression = 'SET fruits= :my_data',
                ExpressionAttributeValues = {
                    ':my_data': data
                }
            ) 

Но это перезапишет фрукты и удалит apple в приведенном выше примере.

Есть ли способ обновить части json без указания, какие именно атрибуты c вы хотите обновить?

1 Ответ

0 голосов
/ 31 марта 2020

Некоторые имена атрибутов зарезервированы AWS, есть полный список этих слов: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html

Поэтому вместо использования :data просто переименуйте его во что-нибудь еще как :itemdata

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...