Flask部署Heroku数据库遇psycopg2截断错误,改字段类型后仍报错
问题解决:Heroku部署后数据库字段长度错误未消失
核心原因
你只修改了代码里的模型定义,但Heroku上的PostgreSQL数据库结构没有同步更新,依然保留着原有的password VARCHAR(80)约束,所以插入哈希密码时还是会触发长度截断错误。
解决步骤
1. 本地生成并应用迁移脚本
确保本地通过Flask-Migrate生成结构变更的迁移文件:
# 生成迁移脚本,备注修改说明 flask db migrate -m "modify password field type to TEXT" # 将变更应用到本地数据库(验证正确性) flask db upgrade
2. 提交迁移文件到版本库
把migrations文件夹下新增的迁移脚本(通常是versions目录里的新py文件)提交到GitHub:
git add migrations/ git commit -m "add migration for password field type change" git push origin main
3. 推送代码到Heroku并执行远程迁移
# 推送更新后的代码到Heroku git push heroku main # 在Heroku服务器上执行数据库迁移,更新远程数据库结构 heroku run flask db upgrade
4. 验证数据库结构(可选)
通过Heroku的psql命令查看远程数据库的表结构,确认password字段类型已改为TEXT:
# 进入Heroku的数据库终端 heroku run psql # 查看user表的结构(表名默认是模型类名小写,即user) \d user
额外注意事项
- 确保Heroku的环境变量
FLASK_APP已正确配置,否则flask db命令可能无法执行,可通过heroku config:set FLASK_APP=你的启动文件名.py设置 - 如果之前从未在Heroku上执行过迁移,需要先初始化:
heroku run flask db init(已使用Migrate则可跳过此步骤)
内容的提问来源于stack exchange,提问作者Dragynjump
相关产品推荐
相关产品推荐

