DynamoDB Python: создание элемента и добавление его в существующую таблицу - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь добавить элемент в существующую таблицу в DynamoDB, однако я получаю сообщение об ошибке

, пропуская ключевую влажность в элементе

при запуске программы.Необработанные данные JSON: здесь Ниже приведен мой код для создания элемента .

from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal

# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if abs(o) % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(DecimalEncoder, self).default(o)

dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="https://dynamodb.us-east-1.amazonaws.com")

table = dynamodb.Table('Machines')

machinekey = 1
city = "Miami"
state = "Florida"

response = table.put_item(
   Item={
        'machinekey': machinekey,
        'city': city,
        'state': state,
        'machinevals': {
            'machineid': 1,
            'date': "01/03/2019",
            'humidity': 25,
            'pressure': 105
        }
    }
)

print("PutItem succeeded:")
print(json.dumps(response, indent=4, cls=DecimalEncoder))

Ниже приведен мой код для создания таблицы.

from __future__ import print_function # Python 2/3 compatibility
import boto3

dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="https://dynamodb.us-east-1.amazonaws.com")


table = dynamodb.create_table(
    TableName='Machines',
    KeySchema=[
        {
            'AttributeName': 'humidity',
            'KeyType': 'HASH'  #Sort key, not partition (HASH)
        },
        {
            'AttributeName': 'pressure',
            'KeyType': 'RANGE'  #Sort key
        }
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'humidity',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'pressure',
            'AttributeType': 'N'
        },

    ]
    ProvisionedThroughput={
        'ReadCapacityUnits': 10,
        'WriteCapacityUnits': 10
    }
)

print("Table status:", table.table_status)

Я следовал шагу 1, предоставленному на веб-сайте AWS , создав аналогичную структуру JSON и заменив переменные в их примере.

1 Ответ

0 голосов
/ 05 марта 2019

Ваши ключи Range и Hash должны находиться в корне вашей структуры Item ...

response = table.put_item(
   Item={
        'machinekey': machinekey,
        'city': city,
        'state': state,
        'humidity': 25,
        'pressure': 105
        'machinevals': {
            'machineid': 1,
            'date': "01/03/2019"
        }
    }
)

Если вы хотите, чтобы эти значения также были в машинных числах, вы всегда можете скопировать их там, но вашиключ хеша и диапазона должен быть в корне.

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

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