Как обновить таблицу DynamoDB с типом данных DICT (boto3) - PullRequest
0 голосов
/ 17 сентября 2018

Я создал таблицу DynamoDB, которая используется для хранения метаданных, с разными атрибутами для разных типов данных (размер файла, дата и т. Д., Как отдельные атрибуты).

Я пытаюсь взять Python3словарь и использовать его в качестве источника для набора атрибутов, которые должны быть загружены в таблицу.До сих пор я был в состоянии успешно загрузить весь словарь как один атрибут, но я хочу, чтобы каждая пара ключ: значение была своим собственным атрибутом в базе данных.Другими словами, каждая пара ключ: значение из словаря Python3 должна заканчиваться как собственная пара ключ: значение в таблице DynamoDB.Я знаю, что мой код ниже не предназначен для этого до сих пор.

Вот мой код до сих пор:

file_attributes = dict(file.items())

    # Add all metadata to DynamoDB:
    response = table.update_item(
        UpdateExpression="set File_attributes = :f,"
        Key={
            'file_name': key,
        },
        ExpressionAttributeValues={
            ':f': file_attributes,

        },
        ReturnValues="UPDATED_NEW"
    )

1 Ответ

0 голосов
/ 25 ноября 2018

Я думаю, что вы ищете что-то вроде этого:

update_expression = 'SET {}'.format(','.join(f'#{k}=:{k}' for k in file))
expression_attribute_values = {f':{k}': v for k, v in file.items()}
expression_attribute_names = {f'#{k}': k for k in file}

response = table.update_item(
    Key={
        'file_name': key,
    },
    UpdateExpression=update_expression,
    ExpressionAttributeValues=expression_attribute_values,
    ExpressionAttributeNames=expression_attribute_names,
    ReturnValues='UPDATED_NEW',
)

Я изменил ваш пример, чтобы динамически генерировать выражение обновления, используя ExpressionAttributeValues ​​и ExpressionAttributeNames. Требовалось использовать псевдонимы имен, потому что мы не знаем, как называются предметы в словаре file. Сгенерированное выражение обновления будет содержать оператор set для каждого ключа верхнего уровня внутри словаря file. Имена атрибутов начинаются со знака #, а значения атрибутов начинаются со знака :.

...