将旧 (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 或更高版本的主要内容,如果未能解决你的问题,请参考以下文章

1

理解 Django 模型类的定义

将数据从 excel 电子表格导入 django 模型

将旧数据模型转换为全新的数据模型(从头开始并删除其他所有内容)

如何将旧的 mdb-database 导入 C# DataTable [重复]

将旧数据模型文件复制到新项目中进行轻量级核心数据迁移