将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本
Posted
技术标签:
【中文标题】将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本【英文标题】:Import / migrate old (Django 0.97) model data into Django 1.8 or higher 【发布时间】:2018-09-06 06:17:18 【问题描述】:将数据从非常旧的 Django 应用程序 (0.97) 迁移或导入到相对“现代”的 Django 版本 (1.8) 的最佳方法是什么?
应用程序(如果你可以这么称呼它的话)只不过是一系列模型和一些简单的视图。用户主要通过管理 UI 访问它(我知道,我知道)。因此,就要转换的代码而言,很少。我已将 models.py 更新为对 1.8 友好,我可以轻松启动应用的空实例。
但是,一旦我尝试获取系统中的旧数据,就会遇到问题。我以为我会尝试转储数据/加载数据,但没想到它会起作用(而且它没有)。我在这些方面遇到了许多错误:
django.db.utils.IntegrityError: Problem installing fixture
'olddata.json': Could not load contenttypes.ContentType(pk=6):
duplicate key value violates unique constraint
"django_content_type_app_label_5fd9156b761d2158_uniq"
DETAIL: Key (app_label, model)=(contenttypes, contenttype)
already exists.
在深入了解导出文件之前,我想确保自己走在正确的轨道上。有没有更好的方法来做到这一点?
【问题讨论】:
看来您的方向是正确的。您可能想要发布您的模型和 olddata.json 的示例,以便为我们提供更好的想法。您得到的错误是说您试图违反唯一约束。这意味着:1.您的新模型的唯一约束/主键设置错误或 2.您的 olddata.json 以某种方式具有重复的 PK/唯一数据(导出错误等)。 尝试导出特定表并将它们导入新数据库,例如:python manage.py dumpdata app.table --indent 4 --format xml > fixtures/app_table.xml 【参考方案1】:感谢你们俩。看起来好像从 0.97 导出的 json 是问题所在。我进行了完整的 XML 导出和导入,只遇到了一个错误,其中包含一些类似 XML 的内容的记录导致 XML 解析器出现一些问题 - 很容易修复。
似乎 0.97 版本的 dumpdata 输出 Django 1.8 不完全支持的 json。
【讨论】:
以上是关于将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本的主要内容,如果未能解决你的问题,请参考以下文章
将旧数据模型转换为全新的数据模型(从头开始并删除其他所有内容)