尝试方案
plan1:sqlite 导出 成sql文件,mysql倒入
步骤:
- 使用sqlite3的导出功能
sqlite3 db.sqlite3 ".dump" > new.sql
- setting 配置新库,并初始化新库
python3 manage.py migrate
- 登录mysql,使用source 命令进行sql执行
问题:
sqlite导出的文件中,表名都是带双引号,需要替换
部分主键外键问题
结果:引号问题容易解决,主外键问题比较纠结,放弃
plan2:使用django的数据导入导出机制
步骤:
停服务
使用manage进行数据导出 (此时setting配置为 sqlite)
python3 manage.py dumpdata > data.json
- setting配置改成新库,并初始化新库
python3 manage.py migrate
- 使用manage进行导入
python3 manage.py loaddata data.json
问题:
- 系统报错,主键冲突
django.db.utils.IntegrityError: Problem installing fixture '/home/webmonitor/data.json': Could not load contenttypes.ContentType(pk=7): (1062, "Duplicate entry 'myecho-site' for key 'django\_content\_type\_app\_label\_model\_76bd3d3b_uniq'")
原因不明,后发现可能是由于model进行过修改,原库是通过补丁一次一次变更,新库是直接初始化,model的位置不同
解决方案:
- 使用dbshell (
python3 manage.py dbshell
) 或者直接进入新库,删除初始化的数据
DELETE FROM django\_content\_type;
在delete的过程中发现有依赖的表,一并删除
- 重新执行数据导入
python3 manage.py loaddata data.json
结果:成功 Installed 39294 object(s) from 1 fixture(s)