Python 在DynamoDB中插入多行json
我有以下json文件Python 在DynamoDB中插入多行json,python,amazon-web-services,lambda,amazon-dynamodb,Python,Amazon Web Services,Lambda,Amazon Dynamodb,我有以下json文件 {"columnwithoutname":"structureet","nofinesset":810001792,"nofinessej":810001784} {"columnwithoutname":"structureet","nofinesset":670797117,"nofinessej":670010339} 我想用Lambda把它插入DynamoDB。这就是我所做的: def lambda_handler(event, context): buc
{"columnwithoutname":"structureet","nofinesset":810001792,"nofinessej":810001784}
{"columnwithoutname":"structureet","nofinesset":670797117,"nofinessej":670010339}
我想用Lambda把它插入DynamoDB。这就是我所做的:
def lambda_handler(event, context):
bucket=event['b']
file_key=event['c']
table=event['t']
recList=[]
s3 = boto3.client('s3')
dynamodb = boto3.client('dynamodb')
obj= s3.get_object(Bucket=bucket, Key=file_key)
recList=obj['Body'].read().split('\n')
for row in recList:
response = dynamodb.put_item(TableName='test-abe', Item=row)
但我有一个错误:
"errorMessage": "Parameter validation failed:\nInvalid type for parameter Item
显然,我还需要精确地确定每列的类型,以便它可以被接受。不管怎样,你想自动完成吗?我希望所有列都是字符串。谢谢您需要操纵每一行,以获得“S”格式:
import json
for row in recList:
row_dict = json.loads(row)
ddb_row_dict = {k:{"S": v} for (k,v) in row_dict.items()}
response = dynamodb.put_item(TableName='test-abe', Item=ddb_row_dict)
DynamoDB客户端希望
项
参数为dict
(per)
当您执行recList=obj['Body'].read().split('\n')
时,您得到的是一个str
列表,因此将str
传递给一个需要dict
的参数显然会失败
另一个要考虑的是,DyDoDB <强>客户端>以非常具体的格式预期项目,并带有显式指定的属性数据类型。如果您想阅读JSON并简单地编写它,我建议使用DynamoDBresource,如下所示:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
table.put_item(item)
Table.put\u item()
接受简单的dict
,无需为每个属性指定数据类型,所以您只需从文件中读取,将其转换为dict并发送()。谢谢。我可以将我的json行转换为dict并使用table.put_item插入它们吗?@Haha通常这就足够了。您可以使用json.loads(row)
将json加载到dict中并对其进行测试。