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

如何修复sqlalchemy.exc.DataError: psycopg2字符串数据右截断报错

错误根因
  • 直接触发报错的是image字段长度不足:你当前模型中将存储图片二进制内容的image字段定义为db.String(100),最多仅支持存储100个字符,但你上传的PNG图片二进制内容长度超过133万字符,远超出字段最大长度限制,PostgreSQL校验不通过触发截断报错。
  • 本地运行正常的原因:本地开发环境大概率使用SQLite数据库,SQLite对VARCHAR类型的长度限制不做强制校验,超出定义长度的数据也可以正常写入;而Heroku上使用的PostgreSQL数据库会严格执行字段长度校验规则,因此触发报错。
修复方案

方案1:直接修改字段类型存储二进制内容(适合小体量应用)

将Ads模型中的image字段类型替换为适配大二进制内容的LargeBinary类型,无需设置长度限制:

class Ads(db.Model):
    # 其他字段保持不变,仅修改image字段定义
    image = db.Column(db.LargeBinary)

修改完成后执行数据库迁移操作:

  1. 本地生成迁移脚本:flask db migrate
  2. 提交迁移脚本到代码仓库并部署到Heroku
  3. 在Heroku环境执行数据库升级:heroku run flask db upgrade

方案2:存储图片到对象存储(更推荐,性能更好)

直接在数据库存储二进制文件会大幅降低数据库读写性能,数据量增长后很容易出现性能瓶颈,更推荐的做法是:

  • 将上传的图片存储到第三方对象存储服务(如Cloudinary、阿里云OSS、七牛云等)
  • 将image字段改为存储图片的公网访问URL,字段类型调整为db.String(255)即可满足需求
额外注意

如果后续description字段需要存储更长的描述内容,也可以将其类型从db.String(100)修改为db.Text,避免后续出现同样的长度截断问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:15:10