Django将数据从Sqlite迁移到MySQL


背景

最近在做一个内部项目时,为了开发效率,所以选择了Sqlite作为数据库,在项目上线时需要将数据库切换到MySQL。

操作步骤

  1. 使用dumpdata将数据导出到文件
python manage.py dumpdata -> data.json
  1. 修改django的settings配置,改为MySQL

  2. 使用loaddata将数据导入到新数据库

python manage.py loaddata data.json

等待命令执行完毕之后,可以自行检查数据是否正确导入。

常见问题

由于字段过长导致的导入失败

这种问题是因为Sqlite对于字段长度并不做校验,比如我们定义一个CharField(max_length=200),但是如果写入的长度超过200,Sqlite3也不会报错。反之,MySQL和PG都会对字段长度进行严格的校验,如果超出就会报错。 遇到这种问题,就需要对错误的数据进行单独处理(删除、或者修改字段类型)

Django 自带的contentType会导致出现一些问题

如果导入数据时出现报错,报错的信息类似于:

Could not load contenttypes.ContentType(pk=24): UNIQUE
 constraint failed: django_content_type.app_label, django_content_type.model

这通常是因为导出数据时没有带contenttype信息导致的,这时就需要再次导出数据,在导出时使用如下命令:

python manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission > data.json

之后再使用loaddata导入数据即可。