基于Flask-base项目从SQLite迁移至Heroku PostgreSQL的问题
从SQLite迁移到Heroku PostgreSQL的实操指南(针对flask-base项目)
我之前也折腾过flask-base项目从SQLite迁到Heroku PostgreSQL的事儿,给你整理几个关键步骤和踩过的坑,应该能帮你推进:
1. 先把本地PostgreSQL测试环境的配置捋顺
首先确认config.py里测试环境的数据库URI配置是正确的,格式得是这样:
SQLALCHEMY_DATABASE_URI = 'postgresql://[你的PostgreSQL用户名]:[密码]@localhost:5432/test'
别偷懒省略用户名和密码,先手动用psql test登录本地库试试,确保能正常连接、创建表,这一步错了后面全白搭。
2. 用Flask-Migrate把迁移同步到本地PostgreSQL
既然已经有了SQLite的迁移文件,切换到测试环境执行迁移:
# Mac/Linux用export,Windows用set export FLASK_APP=app/__init__.py export FLASK_ENV=testing # 执行迁移升级 flask db upgrade
跑完之后去本地PostgreSQL的test库查一下表结构,确保和SQLite里的一致,数据也能正常读写,先在本地把问题解决了再碰Heroku。
3. 把本地PostgreSQL的数据同步到Heroku
如果本地测试没问题,接下来把数据导到Heroku:
方法一:用pg_dump导出再导入
先导出本地库的SQL文件:
pg_dump -d test -f local_data_dump.sql
然后把这个文件导入到Heroku的数据库:
heroku pg:psql --app [你的Heroku应用名] < local_data_dump.sql
方法二:用Heroku的pg:push直接推送(更快捷)
heroku pg:push test DATABASE_URL --app [你的Heroku应用名]
这里的DATABASE_URL是Heroku自动给你配置的数据库环境变量,不用改,直接用就行。
4. 验证Heroku上的数据库状态
导入完成后,登录Heroku的数据库检查:
heroku pg:psql --app [你的Heroku应用名]
输入\dt看看所有表是否都存在,再查几条核心数据确认导入成功,比如SELECT * FROM users LIMIT 5;(如果有users表的话)。
我踩过的几个坑,给你提个醒
- 字段类型不兼容:SQLite的字段类型比较宽松,比如
BOOLEAN在PostgreSQL里是BOOL,如果迁移文件里用了SQLite特有的类型,可能会报错,得手动调整迁移文件里的字段定义。 - 编码问题:如果导出导入时出现乱码,导出的时候加上编码参数:
pg_dump -E UTF8 -d test -f local_data_dump.sql。 - Heroku连接超时:如果数据量比较大,直接导入可能超时,可以把SQL文件分成小份,或者用Heroku的
pg:copy工具分批导入。
内容的提问来源于stack exchange,提问作者user1592380
相关产品推荐
相关产品推荐

