使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件
Posted
技术标签:
【中文标题】使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件【英文标题】:CSV-File from AWS S3 into PostgreSQL Amazon RDS using python 【发布时间】:2018-09-19 09:50:47 【问题描述】:状态:
-
我在 Amazon RDS 上的 PostgreSQL 数据库中创建了新表
我已将 csv 文件上传到 Amazon S3 上的 Bucket
通过 lambda 函数,我已经连接了 Amazon S3 Buckets 和 Amazon RDS
我可以通过以下代码读取 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
这同样适用于其他模块或库,例如openpyxl 等。我总是被告知“没有名为 'OneNameThatIHaveNotImported' 的模块”
那么有没有人有任何想法或知道另一种方式如何通过 lambda 函数编辑 s3 上的 csv 文件并将编辑后的版本导入 rds 数据库?
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:SO answer references 的回答线程将使您走上正确的道路。基本上,您需要在 EC2 中创建与运行 AWS lambda 函数的 linux 映像相匹配的部署包。更好的是,您可以从通过 AWS CLI 创建部署包的同一个暂存 EC2 实例部署 lambda 函数。
如果您想要开箱即用的修复,您也可以使用 [预编译的 lambda 包][2]。
[2]:https://github.com/jkehler/awslambda-psycopg2 或更一般地说,https://github.com/Miserlou/lambda-packages
【讨论】:
以上是关于使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
用于将数据从AWS S3加载到Redshift的Python脚本
AWS S3 静态站点 CORS jquery ajax POST 到 API Gateway
使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件
使用 fetch 方法从 AWS S3 下载文件会引发 CORS 错误