Как вставить список объектов за 1 запись в DynamoDB, используя Python? - PullRequest
1 голос
/ 17 февраля 2020

Привет. Я пытаюсь сгенерировать таблицу, в которой будут все поездки за 1 день. Один из атрибутов 1 поездки на такси будет включать в себя список всех скидок, которые были использованы в этой поездке.

Может использоваться любое количество скидок. Я не уверен, как это сделать, как я могу включить этот список скидок в один атрибут товара? Таким образом, в основном написать 1 элемент со списком атрибутов в DynamoDB?

Вот моя таблица:

def create_table(self):
        table = dynamodb.create_table(
            TableName='TaxiTable',
            KeySchema=[
                {
                    'AttributeName': 'trip',
                    'KeyType': 'HASH'
                },
            ],
            AttributeDefinitions=[
                {
                    'AttributeName': 'trip',
                    'AttributeType': 'S'
                },

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

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

Ключ 'trip' будет состоять из 1 длинной строки с началом этой поездки на такси где была последняя остановка дня, номер такси, количество остановок и дата поездки.

trip_key: 12thAve.MapleDrive.0124.02.02202020

внизу в качестве атрибута я хотел бы получить список всех скидок, которые были использованы в этой поездке на такси / Что-то вроде:

trip_key: 12thAve.MapleDrive.0124.02.02202020
discount_map: 
{
  discount1: { name: 'Senior', total_saved: '10'},
  discount2: { name: 'Student', total_saved: '30'},
  discount3: { name: 'Employee', total_saved: '20'},
  discount4: { name: 'Hotel', total_saved: '30'}
}

Я не знаю, сколько скидок можно было использовать в одной поездке. Может быть между 5-10. Но я хотел бы включить все скидки, используемые в одной вкладке. Я хотел бы запросить указанную c скидку, используемую в поездке на такси, и общую сумму, сохраненную из этой таблицы.

Я не знаю, следует ли сначала преобразовать список в JSON объект? Или, если есть способ перебрать список и вставить его так, как я хотел бы.

import boto3

class taxi_discount:
    name = None
    total_saved = None

# rest of logic for this class...


class insert_to_dynamoDb:

    dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000")

    taxi_trip_key= None            
    taxi_discounts_list = []

    def __init__(taxi_trip, discount_list):
            self.taxi_trip_key= taxi_trip
            self.discount_list = discount_list



    def write_to_table(self):
            table = dynamodb.Table('TaxiTable')

            response = table.put_item(
                Item={
                    'trip': taxi_trip_key,
                    'discount_map': taxi_discounts_list
                    }
                } )

1 Ответ

2 голосов
/ 17 февраля 2020

DynamoDB поддерживает пакетную запись.

Пример из документов:

with table.batch_writer() as batch:
    for i in range(50):
        batch.put_item(
            Item={
                'account_type': 'anonymous',
                'username': 'user' + str(i),
                'first_name': 'unknown',
                'last_name': 'unknown'
            }
        )

Путеводители
Документы API

...