猿问

如何使用 Python 在 1 次写入 DynamoDB 中插入对象列表?

我正在尝试生成一个表,该表将包含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之间。但我想在一个插入中包括所有使用的折扣。我想查询出租车旅行中使用的特定折扣以及从此表中节省的总折扣。


我不知道是否应该首先将列表转换为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

                    }

                } )


繁星coding
浏览 112回答 1
1回答

白板的微信

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'            }        )
随时随地看视频慕课网APP

相关分类

Python
我要回答