【问题标题】:Insert multiple lines of json in DynamoDB在 DynamoDB 中插入多行 json
【发布时间】:2020-03-10 13:04:53
【问题描述】:

我有以下 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

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

【问题讨论】:

    标签: python amazon-web-services lambda amazon-dynamodb


    【解决方案1】:

    DynamoDB 客户端期望 Item 参数为 dict(根据 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.put_item

    当您执行recList = obj['Body'].read().split('\n') 时,您得到的是str 的列表,因此将str 传递给期望dict 的参数显然会失败。

    要考虑的另一件事是 DynamoDB client 期望项目采用非常特定的格式,并具有明确指定的属性数据类型。如果您想阅读 JSON 并简单地编写它,我建议使用 DynamoDB resource,如下所示:

    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table(table_name)
    table.put_item(item)
    

    Table.put_item() 接受简单的dict,无需为每个属性指定数据类型,因此您可以简单地从文件中读取,将其转换为 dict 并将其发送出去 (https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Table.put_item)。

    【讨论】:

    • 谢谢。我可以将我的 json 行转换为 dict 并使用 table.put_item 插入它们吗?
    • @Haha 通常就足够了。您可以使用json.loads(row) 将json加载到dict中并进行测试。
    【解决方案2】:

    您需要操作每一行以获得“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)
    

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多