Обновление подпункта в Item в DynamoDB с использованием Python - PullRequest
0 голосов
/ 07 сентября 2018

Привет хочу постоянно добавлять к подпункту, который первоначально объявлен пустым, а позже будет обновлен.

Вот код -

dynamodb = boto3.resource('dynamodb',endpoint_url='http://localhost:8000')
# Creating the Table
table = dynamodb.create_table(
            TableName='TableN',
            KeySchema=[
                           {
                           'AttributeName': 'name',
                           'KeyType': 'HASH'
                           }
                       ],
            AttributeDefinitions=[

                            {
                                'AttributeName': 'name',
                                'AttributeType': 'S'
                            }
                        ],
            ProvisionedThroughput={
                        'ReadCapacityUnits': 1000,
                        'WriteCapacityUnits': 1000
                        }
        )
# Updating with the Initial Values
table = dynamodb.Table('TableN')
IntValues = {
              "datapoints": [], 
               "attributes": {"host": "server1", "customer": "Ast1"}, 
                "name": "B001_P001"
             }

table.put_item(Item=IntValues)

Теперь я хочу обновить «точки данных» набором значений -

datapoint1 = {"x1":1,"x2":"OK","x3":"23.123"}
datapoint2 = {"x1":3,"x2":"ON","x3":"56.123"}
datapoint3 = {"x1":5,"x2":"OFF","x3":"78.123"}

Так что это окончательное значение должно выглядеть следующим образом -

{
    "name" : "B001_P001",
    "datapoints" : [
        {
          "x1" : 1,
          "x2" : "OK",
          "x3":"23.123"
        },
        {
          "x1" : 1,
          "x2" : "OK",
          "x3":"23.123"
        },
        {
          "x1" : 1,
          "x2" : "OK",
          "x3":"23.123"
        }]
        "attributes": {"host": "server1", "customer": "Ast1"}
}

Как я могу обновить существующий подпункт, не удаляя и не создавая заново весь элемент?

1 Ответ

0 голосов
/ 17 сентября 2018

Я использовал update_item для обновления каждой точки данных-

После первоначального обновления, созданного, как показано в вопросе, с использованием put_item, я использовал update_item для обновления атрибутов.

Я использовал цикл для передачи отдельных точек данных -

ulist = datapoint1     
table.update_item(
                  Key={'name':'TableN'},
                  UpdateExpression= 'SET #datapoints = list_append(#datapoints,:val1)',
                  ExpressionAttributeNames={'#datapoints': 'datapoints'},
                  ExpressionAttributeValues={':val1':ulist}
                 )
...