如何从 csv 插入到 dynamodb

ays*_*ysh 2 python amazon-s3 aws-lambda

Dynamo 数据库有一个表员工主键作为 id

csvdynamo下面是bucket中上传的data.csv

存储桶名称 = csvdynamo

id,name,co
20,AB,PC
21,CD,PC
22,EF,MC
23,GH,MC
Run Code Online (Sandbox Code Playgroud)

需要将以上csv插入dynamodb

伪代码

for emp in employees:
    emp_data= emp.split(',')
    print (emp_data)

    try:
        table.put_item(
            Item = {
                "emp_id": int(emp_data[0]),
                "Name": emp_data[1],
                "Company": emp_data[2]
            }
        )
    except Exception as e:
          pass
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 6

这是一个有效的lambda 函数示例,我使用自己的函数、csv 文件和 dynamodb 对其进行了验证。我认为代码是不言自明的。这应该是您最终用例的良好开端。

          import boto3
          import json
          import os

          bucket_name = os.environ['BUCKET_NAME']
          csv_key = os.environ['CSV_KEY_NAME'] # csvdynamo.csv
          table_name = os.environ['DDB_TABLE_NAME']
          
          # temprorary file to store csv downloaded from s3
          tmp_csv_file = '/tmp/' + csv_key

          s3 = boto3.resource('s3')
          db_table = boto3.resource('dynamodb').Table(table_name)

          def save_to_dynamodb(id, name, co):

            return db_table.put_item(
                Item={
                  'emp_id': int(id),
                  'Name': name,
                  'Company': co
                })

          def lambda_handler(event, context):

              s3.meta.client.download_file(
                            bucket_name, 
                            csv_key, 
                            tmp_csv_file)

              with open(tmp_csv_file, 'r') as f:

                next(f) # skip header

                for line in f:

                  id, name, co = line.rstrip().split(',')

                  result = save_to_dynamodb(id, name, co)

                  print(result)

              return {'statusCode': 200}
Run Code Online (Sandbox Code Playgroud)