使用COPY命令将Sv文件从S3上传到Postgres时麻烦

问题描述 投票:0回答:1

我在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中)。

postgresql amazon-web-services aws-lambda rds
1个回答
0
投票

当调用.read()时,您将整个“文件”读入内存,并读入一个字符串。因此contenttotable并非文件状对象。

您可以使用StringIO将其转换回类似文件的对象,但是最好避免首先将整个内容读取到内存中。

© www.soinside.com 2019 - 2024. All rights reserved.