DJango配置mysql数据库以及数据库迁移
django配置mysql数据库以及数据库迁移
一.django 配置mysql数据库
在settings.py中配置
import pymysql # 配置mysql pymysql.install_as_mysqldb() databases = { 'default': { 'engine': 'django.db.backends.mysql', # 数据库引擎 'name': 'mydb', # 你要存储数据的库名,事先要创建之 'user': 'root', # 数据库用户名 'password': '1234', # 密码 'host': 'localhost', # ip 'port': '3306', # 数据库使用的端口 } }
数据库结构迁移
python3不支持mysqldb,可用pymysql代替。
1.首先,在python虚拟环境下安装pymysql:pip install pymysql。
2.然后,在项目文件夹下的_init_.py(实际上也可以添加到settings.py中,如上。)添加如下代码即可。
import pymysql pymysql.install_as_mysqldb()
3.再者,在terminal中执行数据库迁移命令:
python manage.py makemigrations python manage.py migrate 温馨提示:若执行python manage.py makemigrations时提示"no changes detected", 则试试先执行python manage.py makemigrations --empty appname解决问题。
二.数据迁移
把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': 'ip', 'port': '3306', } }
然后在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存在数据导致的。
3、加载时区表
另外,有可能所安装的mysql没有加载时区表。这个可能会导致filter对日期的查询有问题。django官方文档也指出这个问题。mysql官网也有对应处理方法:
linux/mac解决方法都很简单。windows系统要先下载一个sql文件:
下载完成之后,解压得到一个sql文件,再执行cmd命令导入该文件即可:
mysql -u root -p mysql < timezone_posix.sql
4、mysql数据到postgresql
操作很简单:
python manage.py dumpdata > backup.json
到postgresql对应的配置中:
python manage.py loaddata backup.json
下一篇: 揭秘:古代妃子被打入冷宫后如何度日呢?