背景
最近在做一个内部项目时,为了开发效率,所以选择了Sqlite作为数据库,在项目上线时需要将数据库切换到MySQL。
操作步骤
- 使用dumpdata将数据导出到文件
python manage.py dumpdata -> data.json
修改django的settings配置,改为MySQL
使用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导入数据即可。