You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AWS Lambda中StringIO对象无getValue属性的报错问题

故障修复方案

你遇到的报错由两个底层问题导致,修改后即可正常运行:

  • COPY命令方向配置错误:你要将查询结果从PostgreSQL导出到本地内存,需要使用TO STDOUT参数,你当前写的TO STDIN是用于向PostgreSQL写入数据的方向,无法输出查询结果
  • StringIO方法调用错误:Python 3标准库的io.StringIO类没有getValue()方法,正确的获取缓冲区内容的方法是全小写的getvalue()

修正后的完整代码如下:

import psycopg2
from io import StringIO
import boto3

bucket = 'my_s3_bucket'
filename = 'test_data'
s3_resource = boto3.resource('s3')
conn = psycopg2.connect(
    host='localhost',
    port='5432',
    dbname='billing_test',
    user='postgres',
    password='password!'
)
cur = conn.cursor()
sql_query = "SELECT * from public.customers limit 1"

# 修正COPY命令方向为STDOUT
query = '''COPY ({}) TO STDOUT csv header'''.format(sql_query)

file = StringIO()
cur.copy_expert(query, file)
# 修正方法名为全小写的getvalue()
s3_resource.Object(bucket, f'{filename}.csv').put(Body=file.getvalue())
cur.close()
conn.close()

补充说明:如果你的查询结果数据量较大,也可以在调用cur.copy_expert后执行file.seek(0),直接将文件对象传入put方法的Body参数,避免一次性加载全部内容到内存。

内容的提问来源于stack exchange,提问作者cocktail Enthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:45:00