Django 转储数据库时可能遇到的问题

在 Django 中从 SQLite 迁移到 MySQL 遇到了若干问题,记录在本文。

UnicodeDecodeError

UnicodeDecodeError: 
'utf-8' codec can't decode byte 0xff in position 0: 
invalid start byte 

该错误是由于要导入的文件不是 UTF-8 编码导致的。Django 默认似乎会将数据库文件导出为 UTF-16 LE 格式,使用 VSCode 等工具转码成 UTF-8 即可。

IntegrityError

django.db.utils.IntegrityError: 
Problem installing fixture 'backup.json': 
Could not load contenttypes.ContentType(pk=9): 
(1062, "Duplicate entry 'restapi-*' for key 'django_content_type_app_label_model_*_uniq'")

该错误似乎是由于权限数据库转储错误导致的。只需要在导入时,用下面的命令忽略这些表即可。

python manage.py loaddata --exclude auth.permission --exclude contenttypes backup.json

如果仍然看到类似错误,还可以再加几个排除对象:

--exclude auth.user
--exclude admin.logentry

参考资料

添加新评论