Django更换数据库和迁移数据方案( 二 )

: Uses the natural_key() model method to serialize any foreign key and many-to-many relationship to objects of the type that defines the method.作用是导出的时候去除一些约束 , 导入时会自动处理 , 减少导入时因为表之间约束关系的问题
python3 manage.py dumpdata --natural-primary --natural-foreign -o db.json解决方法二: 删除 content_type 数据另一种思路 , 把 migrate 过程产生的初始化数据删了 , 避免导入时和原有数据冲突
先进入 python shell
python3 manage.py shell输入以下Python代码执行
from django.contrib.contenttypes.models import ContentTypeContentType.objects.all().delete()报错2: 编码错误报错信息UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte in Django解决方法一: 使用 Python 的 UTF8 模式(推荐)在导入命令前面加上 -Xutf8 参数
python -Xutf8 manage.py loaddata db.json解决方案二: 魔改 Django 代码

能用 , 但不推荐 , 实在没办法再来试这个方法
修改文件
lib\site-packages\django\core\serializers\json.pyDeserializer 方法中找到这行代码
stream_or_string = stream_or_string.decode()改成这样
stream_or_string = stream_or_string.decode('UTF-16')再进行导入操作
参考资料
  • https://docs.djangoproject.com/en/4.1/ref/django-admin/
  • https://www.shubhamdipt.com/blog/django-transfer-data-from-sqlite-to-another-database/
  • https://javaatpoint.com/solved-unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position-0-invalid-start-byte/
  • https://counter2015.com/2020/01/15/django-migration-sqlite-to-postgre/
  • https://stackoverflow.com/questions/64457733/django-dumpdata-fails-on-special-characters
【Django更换数据库和迁移数据方案】

经验总结扩展阅读