如何在DynamoDB中使用Batch Writer写入String Set类型数据?
问题
我用boto3调用put_item向DynamoDB写入数据时,用带类型标注的格式可以正常存储String Set类型字段:
my_list = ["abc", "efg"] item = { "pk" : {"S": "2308ryfoif"}, "some_list" : {"SS" : my_list} }
现在想改用Batch Writer批量写入,知道批量操作可以不用指定数据类型,比如:
dynamodb_table = boto3.resource('dynamodb').Table('example') with dynamodb_table.batch_writer() as batch: for i in items_list: batch.put_item(Item=i)
但如果直接传入普通列表:
item = { "pk" : "2308ryfoif", "some_list" : my_list }
这个列表会被转成DynamoDB的List类型,请问怎么在批量写入时把它存成String Set类型?
解决方案
有两种可行的方式:
方式一:用Python集合(set)替代列表
boto3会自动把Python的set类型映射为DynamoDB的String Set(SS)类型,只需要把你的列表转换成集合即可:
my_set = {"abc", "efg"} # 直接定义集合,或者用`set(my_list)`转换现有列表 item = { "pk" : "2308ryfoif", "some_list" : my_set } # 批量写入代码 dynamodb_table = boto3.resource('dynamodb').Table('example') with dynamodb_table.batch_writer() as batch: batch.put_item(Item=item)
方式二:保留带类型标注的格式
Batch Writer的put_item方法完全支持单个put_item的带类型标注格式,直接沿用原来的写法就行:
my_list = ["abc", "efg"] item = { "pk" : {"S": "2308ryfoif"}, "some_list" : {"SS" : my_list} } # 批量写入代码 dynamodb_table = boto3.resource('dynamodb').Table('example') with dynamodb_table.batch_writer() as batch: batch.put_item(Item=item)
内容的提问来源于stack exchange,提问作者kishi
相关产品推荐
相关产品推荐

