Как добавить «Карту Карт» в DynamoDB с помощью boto3 (python) - PullRequest
2 голосов
/ 20 октября 2019

У меня есть следующая структура в DynamoDB:

{
  "fruits": {
    "1": {
      "identifier": "orange",
      "colour": "orange"
    },
    "2": {
      "identifier": "strawberry",
      "colour": "red"
    }
  },
  "username": "my-username"
}

Как добавить «3-й фруктовый предмет» со связанными атрибутами? Я стремлюсь добиться следующего:

{
  "fruits": {
    "1": {
      "identifier": "orange",
      "colour": "orange"
    },
    "2": {
      "identifier": "strawberry",
      "colour": "red"
    },
    "3": {
      "identifier": "pear",
      "colour": "green"
    }
  },
  "username": "my-username"
}

Я пробовал что-то похожее на следующее:

result = table.update_item(
    Key={
        'username': str('my-username')
    },
    UpdateExpression='set fruits.3.identifier = :i, fruits.3.colour = :c',
    ExpressionAttributeValues={
        ':i': 'pear',
        ':c': 'green'
    }
)

Спасибо!

1 Ответ

0 голосов
/ 23 октября 2019

Вы не можете напрямую установить такие атрибуты, как fruits.3.identifier, потому что fruits.3 еще не существует. Вместо этого вы должны установить fruits.3 как целый объект.

Ваше выражение обновления должно быть примерно таким:

result = table.update_item(
    Key={
        'username': str('my-username')
    },
    UpdateExpression='set fruits.3 = :newFruit',
    ExpressionAttributeValues={
        ':newFruit': {
            'colour': 'green',
            'identifier': 'pear'
        }
    }
)
...