使用python从AWS S3到PostgreSQL Amazon RDS的CSV文件

时间:2018-09-19 09:50:47

标签: python postgresql amazon-s3 aws-lambda amazon-rds

状态:

  1. 我已经在Amazon RDS的PostgreSQL数据库中创建了新表
  2. 我已将一个csv文件上传到Amazon S3上的Bucket
  3. 通过lambda函数,我已经连接了Amazon S3存储桶和Amazon RDS
  4. 我可以通过以下代码读取csv文件

    import csv, io, boto3
    
    s3 = boto3.resource('s3')
    client = boto3.client('s3',aws_access_key_id=Access_Key,aws_secret_access_key=Secret_Access_Key)
    buf = io.BytesIO()
    s3.Object('bucketname','filename.csv').download_fileobj(buf)
    
    buf.seek(0)
    while True:
        line =  buf.readlines(1)
        print(line)
    

问题:

我无法导入必要的python库,例如psycopg2,openpyxl等 当我尝试导入psycopg2

    import psycopg2

我得到了错误信息:

    Unable to import module 'myfilemane': No module named 'psycopg2._psycopg'

首先,我没有导入模块“ psycopg2._psycopg”,而是导入了“ psycopg2”。我不知道后缀“ _psycopg”在哪里

其次,我遵循了文档中的所有步骤: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html(1.创建一个目录。2.在该目录的根目录下保存所有Python源文件(.py文件)。3.在目录的根目录下使用pip安装任何库。 4.压缩project-dir目录的内容)

我还阅读了此文档: https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html

其他模块或库也是如此。经常被告知“没有名为“ OneNameThatIHaveNotImported”的模块”

那么,有没有人有其他想法或知道另一种方式,如何通过lambda函数编辑s3上的csv文件并将已编辑的版本导入rds数据库?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

SO answer references的答案线程将使您走上正确的道路。基本上,您需要在与AWS lambda函数运行所在的Linux映像匹配的EC2中创建部署程序包。更好的是,您可以在通过AWS CLI创建部署程序包的同一EC2登台实例中部署lambda函数。

如果您想立即使用修复程序,也可以使用[预编译的lambda程序包] [2]。

[2]:https://github.com/jkehler/awslambda-psycopg2或更笼统的https://github.com/Miserlou/lambda-packages