Django如何把SQLite数据库转换为Mysql数据库
Posted 点滴记忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django如何把SQLite数据库转换为Mysql数据库相关的知识,希望对你有一定的参考价值。
大部分新手刚学Django开发的时候默认用的都是SQLite数据库,上线部署的时候,大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢?
之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据。如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去。
1、SQLite导出数据
导出之前,我们先确保settins.py数据库配置选项那里,还是使用的是SQLite配置,如果已经修改了,请先修改回来:
DATABASES =
\'default\':
\'ENGINE\': \'django.db.backends.sqlite3\',
\'NAME\': os.path.join(BASE_DIR, \'db.sqlite3\'),
然后在CMD命令行里输入:
python manage.py dumpdata > data.json
这样就将数据导出到Django项目根目录下的data.json文件。
2、MySQL导入数据
同样,先将Django的数据库配置改为MySQL的:
DATABASES =
\'default\':
\'ENGINE\': \'django.db.backends.mysql\',
\'NAME\': \'你的数据库名\',
\'USER\': \'你的MySQL用户名\',
\'PASSWORD\': \'你的密码\',
\'HOST\': \'localhost\',
\'PORT\': \'3306\',
先找到数据表对应的 migrations 文件夹,保留 __pycache__
和 __init__.py
文件,其他的都删掉。
然后先执行下面这行命令:
python manage.py makemigrations
再执行下面这行命令:
python manage.py migrate
然后在CMD命令行里输入:
python manage.py loaddata data.json
再运行项目,发现成功运行
注意:
确保Mysql用户表里为空的,如果之前有迁移过数据到Mysql,有可能会出错。注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是content_type相关的表。
进入到MySQL,执行如下的SQL语句:
use 你的数据库名;
delete from auth_permission;
delete from django_content_type;
删除数据之后,再执行一次导入命令即可。基本上,导入不了数据都是MySQL存在数据导致的。
Django如何把SQLite存储的数据迁移至Mysql数据库中
之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据。如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去。
1、SQLite导出数据
导出之前,我们先确保settins.py数据库配置选项那里,还是使用的是SQLite配置,如果已经修改了,请先修改回来:
DATABASES = { \'default\': { \'ENGINE\': \'django.db.backends.sqlite3\', \'NAME\': os.path.join(BASE_DIR, \'db.sqlite3\'), } }
然后在cmd命令行或pycharm的命令终端中输入:
python manage.py dumpdata > data.json
这样就将数据导出到Django项目根目录下的data.json文件。
2、MySQL导入数据
同样,先将Django的数据库配置改为MySQL并把之前的配置注释掉:
DATABASES = { \'default\': { \'ENGINE\': \'django.db.backends.mysql\', \'NAME\': \'你的数据库名\', \'USER\': \'你的MySQL用户名\', \'PASSWORD\': \'你的密码\', \'HOST\': \'localhost\', \'PORT\': \'3306\', } } 并在项目配置目录下的__init__.py文件中加入 import pymysql pymysql.install_as_MySQLdb()
3.执行数据库迁移
更改完配置后,执行数据库迁移操作命令,同步生成相应的表结构
python manage.py makemigrations
python manage.py migrate
然后在cmd命令行或pycharm的命令终端中输入(这一步是把导出的数据同步到mysql数据库中):
python manage.py loaddata data.json
注意:
确保Mysql用户表里为空的,如果之前有迁移过数据到Mysql,有可能会出错。注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是content_type相关的表。
进入到MySQL,执行如下的SQL语句:
use 你的数据库名; delete from auth_permission; delete from django_content_type;
删除数据之后,再执行一次导入命令即可。基本上,导入不了数据都是MySQL存在数据导致的。
ps:最后在迁移的过程中可能会出现编码的问题,当报错时,点进错误提示,我遇到的只是把decode改为encode。
以上是关于Django如何把SQLite数据库转换为Mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的 Django SQLite 数据库内容放入 Heroku PostGreSQL 数据库?