我在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中)。
当调用.read()时,您将整个“文件”读入内存,并读入一个字符串。因此contenttotable并非文件状对象。
您可以使用StringIO将其转换回类似文件的对象,但是最好避免首先将整个内容读取到内存中。