Amazon web services 我想使用Python(Boto3)以CSV格式将DynamoDB表导出到S3 bucket

Amazon web services 我想使用Python(Boto3)以CSV格式将DynamoDB表导出到S3 bucket,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,boto3,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,Boto3,此问题已在以下链接中提出: 我已按照评论中的建议修改了守则。代码如下所示: import csv import boto3 import json dynamodb = boto3.resource('dynamodb') db = dynamodb.Table('employee_details') def lambda_handler(event, context): AWS_BUCKET_NAME = 'session5cloudfront' s3 = boto3.res

此问题已在以下链接中提出:

我已按照评论中的建议修改了守则。代码如下所示:

import csv
import boto3
import json
dynamodb = boto3.resource('dynamodb')
db = dynamodb.Table('employee_details')
def lambda_handler(event, context):
    AWS_BUCKET_NAME = 'session5cloudfront'
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(AWS_BUCKET_NAME)
    path = '/tmp/' + 'employees.csv'
    try:
        response = db.scan()
        myFile = open(path, 'w')  

        for i in response['Items']:
            csv.register_dialect('myDialect', delimiter=' ', quoting=csv.QUOTE_NONE)
            with myFile:
                writer = csv.writer(myFile, dialect='myDialect')
                writer.writerows(i)
            print(i)
    except :
        print("error")

    bucket.put_object(
        ACL='public-read',
        ContentType='application/csv',
        Key=path,
        # Body=json.dumps(i),
    )
    # print("here")
    body = {
        "uploaded": "true",
        "bucket": AWS_BUCKET_NAME,
        "path": path,
    }
    # print("then here")
    return {
        "statusCode": 200,
        "body": json.dumps(body)
    }
我是一个新手,请帮助我修复这段代码,因为它在S3 Bucket中创建的文件中插入数据时遇到问题


谢谢

我修改了代码,使之更简单,并且还可以处理数据量超过1MB的表的分页响应:

导入csv 进口boto3 导入json 表_NAME='员工_详细信息' OUTPUT_BUCKET='我的BUCKET' TEMP_FILENAME='/tmp/employees.csv' 输出密钥='employees.csv' s3_resource=boto3.资源's3' dynamodb_resource=boto3.资源“dynamodb” table=dynamodb\u资源。table\u名称 def lambda_handlerevent,上下文: 使用openTEMP_文件名,“w”作为输出_文件: writer=csv.writeroutput\u文件 header=True 第一页=真 分页结果 尽管如此: 扫描DynamoDB表 如果第一页: 响应=table.scan 第一页=假 其他: response=table.scanExclusiveStartKey=response['LastEvaluatedKey'] 对于响应中的项['Items']: 写入标题行? 如果标题为: writer.writerowitem.keys 标题=假 writer.writerowitem.values 最后一页? 如果“LastEvaluatedKey”未响应: 打破 将临时文件上载到S3 s3_resource.BucketOUTPUT_BUCKET.upload_fileTEMP_文件名,输出_键
我已经修改了代码,使其更简单,并对数据量超过1MB的表处理分页响应:

导入csv 进口boto3 导入json 表_NAME='员工_详细信息' OUTPUT_BUCKET='我的BUCKET' TEMP_FILENAME='/tmp/employees.csv' 输出密钥='employees.csv' s3_resource=boto3.资源's3' dynamodb_resource=boto3.资源“dynamodb” table=dynamodb\u资源。table\u名称 def lambda_handlerevent,上下文: 使用openTEMP_文件名,“w”作为输出_文件: writer=csv.writeroutput\u文件 header=True 第一页=真 分页结果 尽管如此: 扫描DynamoDB表 如果第一页: 响应=table.scan 第一页=假 其他: response=table.scanExclusiveStartKey=response['LastEvaluatedKey'] 对于响应中的项['Items']: 写入标题行? 如果标题为: writer.writerowitem.keys 标题=假 writer.writerowitem.values 最后一页? 如果“LastEvaluatedKey”未响应: 打破 将临时文件上载到S3 s3_resource.BucketOUTPUT_BUCKET.upload_fileTEMP_文件名,输出_键
太好了,谢谢你,约翰。工作很顺利,非常好,谢谢约翰。它工作顺利请注意,截至2020年8月,此用例DDB到S3由AWS支持,无需编码。更多信息请参见他们的博客:请注意,截至2020年8月,AWS支持此用例DDB到S3,无需编码。更多信息请访问他们的博客: