如何将Heroku上Django生产应用的sqlite3数据迁移到本地localhost应用
Heroku Django sqlite3 生产数据迁移到本地方案
前置验证
先确认本地和生产的Django版本、所有依赖包版本、数据库迁移文件完全一致,避免字段不匹配导致迁移失败。
方案1:Django 原生导入导出(兼容性最高,推荐)
- 导出生产数据
- 本地终端执行命令登录Heroku生产shell:
heroku run bash -a 你的Heroku应用名称 - 进入Django项目根目录后,执行导出命令,排除易冲突的系统表:
python manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > production_data.json - 退出生产shell,执行命令将导出的json文件拉取到本地:
heroku ps:copy production_data.json -a 你的Heroku应用名称
- 本地终端执行命令登录Heroku生产shell:
- 导入本地环境
- 本地终端进入项目根目录,先执行迁移保证表结构完整:
python manage.py migrate - 若需要清空本地原有业务数据,执行:
python manage.py flush - 执行导入命令:
python manage.py loaddata production_data.json - 启动本地Django服务,验证数据完整性即可。
- 本地终端进入项目根目录,先执行迁移保证表结构完整:
方案2:直接复制sqlite3数据库文件(操作简单,适合小数据量)
- 拉取生产数据库文件
- 本地终端执行:
heroku ps:copy db.sqlite3 -a 你的Heroku应用名称(默认数据库文件路径为项目根目录下的db.sqlite3,若你修改过路径替换为对应路径即可)
- 本地终端执行:
- 替换本地数据库
- 关闭本地运行的Django服务,备份本地原有的
db.sqlite3文件后删除 - 将拉取到的生产环境
db.sqlite3放到项目对应路径即可直接使用。
- 关闭本地运行的Django服务,备份本地原有的
额外提示
Heroku的文件系统是临时存储,dyno重启、重新部署后所有写入的文件都会被重置,你当前生产环境使用sqlite3存储业务数据存在数据丢失风险,建议后续更换为Heroku Postgres等持久化数据库服务。
内容的提问来源于stack exchange,提问作者Shreyash mishra
相关产品推荐
相关产品推荐

