在 DynamoDB 中插入多行 json

我有以下 json 文件


{"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

显然,我还需要精确地确定每列的类型,以便可以接受它。无论如何,自动完成?我希望所有列都是字符串。谢谢


智慧大石
浏览 79回答 2
2回答

明月笑刀无情

DynamoDB 客户端希望参数为 (每 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.put_itemItemdict)当你做你得到的是一个列表,所以传递给一个参数期望显然会失败。recList = obj['Body'].read().split('\n')strstrdict需要考虑的另一件事是,DynamoDB 客户端需要具有非常特定格式的项目,并具有显式指定的属性数据类型。如果您想读取 JSON 并简单地编写它,我建议使用 DynamoDB 资源,如下所示:dynamodb = boto3.resource('dynamodb')table = dynamodb.Table(table_name)table.put_item(item)Table.put_item()接受简单,无需为每个属性指定数据类型,因此您只需从文件中读取,将其转换为dict并将其发送出去(https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Table.put_item)。dict

慕仙森

您需要操作每行才能具有“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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python