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

写入SQL语句到文件并上传S3时遭遇AttributeError错误求助

错误原因与解决方案

错误定位

报错AttributeError: 'int' object has no attribute 'encode'的根源在元数据类型不合法:S3要求Metadata的所有值必须是字符串类型,你代码中metadata = {'_id':123 , 'name':'new'}里的_id是整数,boto3处理元数据时会尝试对值执行编码操作,整数没有encode方法,因此触发错误。

修复步骤

1. 修正元数据类型

将元数据中的整数转为字符串:

metadata = {'_id': '123', 'name': 'new'}

2. 优化上传逻辑(可选但推荐)

你当前先调用upload_file再调用put_object,会导致S3上的文件被覆盖一次,直接用upload_file的ExtraArgs参数可以在上传文件的同时设置元数据,更高效:

local_file_name = 'local_file'
metadata = {'_id': '123', 'name': 'new'}
text_file_path = '/tmp/' + str(local_file_name) + '.csv'

s3_client = boto3.client('s3')
with open(text_file_path, 'w') as file:
    # 避免pg_content为None时写入报错,添加默认空字符串
    file.write(data.get('pg_content', ''))

# 上传文件并同时设置元数据
s3_client.upload_file(
    text_file_path,
    bucket_name,
    file_name,
    ExtraArgs={'Metadata': metadata}
)

额外注意

如果data.get('pg_content')可能返回None,建议添加默认值(如上述代码中的''),避免写入文件时触发TypeError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:50:07