【Django | 数据迁移】SQLite3->MYSQL

一、SQLite导出数据

新数据库字符集要>=源数据库
导出之前,我们先确保settins.py数据库配置选项那里,还是使用的是SQLite配置,如果已经修改了,请先修改回来:

    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }

然后在命令行CMD中·输入:

python manage.py dumpdata > data.json

这样就将数据导出到Django项目根目录下的data.json文件。

二、MySQL导入数据

同样,先将Django的数据库配置改为MySQL的:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '你的数据库名',
        'USER': '你的MySQL用户名',
        'PASSWORD': '你的密码',
        'HOST': '数据库地址,默认localhost',
        'PORT': '数据库端口,默认3306',
    }
}

接下来,我们要把sqlite3表映射到mysql里面,执行下面命令创建好数据表

python manage.py migrate

注意出错的时候所报的错误信息。如果提示有重复主键,那需要先删掉数据。这些数据是在给MySQL数据库应用迁移文件的时候产生的,一般是content_type相关的表。所以要先到Mysql里删除这两个表里的数据,如果不删除会出现如下错误:
不删除的错误
执行下列SQL语句

use 你的数据库名;
delete from auth_permission;
delete from django_content_type;

删除django_content_type和auth_permission
然后在CMD命令行里输入:

python manage.py loaddata data.json

三、一些小坑

1. 编码错误

若出现文件编码错误:
文件编码错误
将data.json使用文本编辑器打开,点击另存为,并将编码改为utf-8即可
改编码
然后再执行

python manage.py loaddata data.json

可以看到导入成功导入成功

2.时区问题

另外,有可能所安装的MySQL没有加载时区表。这个可能会导致filter对日期的查询有问题。Django官方文档也指出这个问题。MySQL官网也有对应处理方法:加载时区表

Linux/Mac解决方法都很简单。windows系统要先下载一个sql文件:timezone_2018e_posix_sql.zip

下载完成之后,解压得到一个sql文件,再执行cmd命令导入该文件即可:

mysql -u root -p mysql < timezone_posix.sql
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值