Хранение ни одного значения в DynamoDB с использованием boto3 во избежание изменения имени столбца - PullRequest
0 голосов
/ 28 февраля 2020

Я создал таблицу DynamoDB и пытаюсь сохранить None в таблице.

import boto3

dynamodb = boto3.resource('dynamodb', region_name='eu-west-1')
table = dynamodb.Table('test_table')

table.put_item(
                Item={
                    'ID': '1',
                    'random_value': 'value1',
                    'could_be_none': None}
)

table.put_item(
                Item={
                    'ID': '2',
                    'random_value': 'value2',
                    'could_be_none': 'Not None'}
)

Однако, когда код успешно запускается, результирующая таблица показывает значение NULL, равное true а также к имени столбца добавляется (NULL)

DynamoDB column NULL with true value replacing none value

Я не уверен, почему это происходит или как я могу обрабатывать значения None в DynamoDB

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Помните, что консольное представление таблицы DynamoDB пытается показать вам полное c представление данных для данных без схемы. Поэтому, когда вы видите could_be_none (NULL), консоль сообщает вам, что столбец равен could_be_none, но в таблице могут быть значения null, которые будут представлены true. В Python None совпадает с null. От Python Нет Ключевое слово

Ключевое слово None используется для определения нулевого значения или его отсутствия вообще.

Итак, данные в таблице правильно, вы установили значение none / null. Вы можете, как говорится в другом ответе, вообще не устанавливать значение.

1 голос
/ 28 февраля 2020

DynamoDB не допускает пустых значений в столбцах. Но хорошо, если не у каждой строки одинаковый набор столбцов. Поэтому я бы просто не добавил этот столбец в строки, в которые вы хотите поместить None.

Если вы хотите сохранить согласованность между объектами в вашем коде, который вы читаете из DynamoDB, то проверьте, находится ли column_name в ответе DynamoDB, и добавьте column_name = None в ваш объект.

...