【发布时间】:2019-12-25 01:02:47
【问题描述】:
我在 lambda 中使用 python 脚本将 CSV 文件从 S3 上传到位于 Postgres RDS 中的 SQL 表。
我正在尝试将数据从 csv 文件上传到这样的表中 -
sqlstr = "COPY mrr.{0} (\"{1}\") FROM STDIN DELIMITER ',' CSV HEADER".format(table_name, columns) #copy from csv file to table
ss3 = boto3.client('s3')
obj = ss3.get_object(Bucket=bucket_name, Key=namefile) #namefile is the csv file name
contenttotable = obj['Body'].read().decode('utf-8')
cur.copy_expert(sqlstr, contenttotable)
观察日志说 - TypeError: file must be a readable file-like object for COPY FROM; a writable file-like object for COPY TO.
如何使脚本像 s3 中的 file-like 对象一样读取它? (最好没有外部模块,因为它在 AWS lambda 中)。
【问题讨论】:
-
我认为问题在于您实际上不能将文件放到您的 lambda 实例中,并且
COPY FROM采用文件名,而不是实际文件或文件本身的内容。您的contenttotable定义是文件内容,与COPY FROM期望的不匹配。也许您可以尝试只使用本地机器上的psql而不是 lambda 实例?这是一个选择吗? -
我想使用 Lambda,因为它是全自动化的,我不需要任何本地机器。从新文件的 s3 触发器到在 s3 上创建 csv 文件的所有过程都有效。这是我需要完成的最后一部分。
-
我试图了解使用
with open和按原样读取内容之间的区别(因为在本地机器中使用with open命令它正在工作。
标签: postgresql amazon-web-services aws-lambda rds