在django中迁移数据的最佳方法是什么?

时间:2008-10-06 20:14:10

标签: django data-migration

在我的模型中进行一些更改(例如,模型中的新字段和新模型)后,将这些更改反映到我的填充数据库的最佳方法是什么?


PS:我想在一个地方看到很多解决方案。显然已经列出了更多解决方案here

6 个答案:

答案 0 :(得分:23)

另一种技术是使用dumpdata和loaddata参数来管理。在中间杀死你的数据库:

  1. python manage.py dumpdata > dump.json
  2. 使用外部工具,删除任何受影响的表,或终止整个数据库
  3. python manage.py loaddata dump.json
  4. 有关详情,请参阅manage.py docs

答案 1 :(得分:17)

我问了一个类似的问题here并得到了不少答案。

有很多方法可以做到这一点,例如手动使用SQL进行转储和重新加载,使用fixture或使用Django的“新兴”架构演变包之一:

答案 2 :(得分:3)

取决于更改的范围。如果它超出了ALTER,那么你正在进行大手术。备份模型和数据库,以便您可以返回。

我的偏好是将您的新(修订,更正,扩展)模型作为新应用程序。它不会有URL或任何东西,只是一个模型。

  1. 将新模型创建为新应用程序。创建测试,以确保它有效。
  2. syncdb用于构建新模型的临时实现。
  3. 编写一个小的一次性实用程序来查询旧模型,并加载新模型。您可能希望在纯SQL中尝试此操作。我更喜欢编写一个简单的查询,构建和保存循环。
  4. 加载新模型后,您可以将其转储到JSON文件。
  5. 从旧模型中提取数据后,您可以使用首选的新格式重建数据库。

    1. 将新模型移动到现有应用程序中。
    2. 删除旧版本的应用程序表。
    3. syncdb用于构建新表。
    4. 使用数据加载JSON文件。

答案 3 :(得分:3)

Django现在有自己的内置迁移,记录在:

https://docs.djangoproject.com/en/dev/topics/migrations/

答案 4 :(得分:2)

使用manage.py sqlall查看新列的参数是什么,并使用Alter表语句手动将它们添加到数据库中。这样您就不必重做数据库;它虽然需要一些SQL知识......

查看here(向下滚动到“对数据库架构进行更改”)

答案 5 :(得分:0)

Perform these steps in order may help you

For more details,

clickhere:http://south.readthedocs.org/en/latest/

1)python manage.py schemamigration apps.appname --initial

上面的步骤创建了默认的迁移文件夹。

2)python manage.py migrate apps.appname --fake

生成虚假迁移。

3)python manage.py schemamigration apps.appname --auto

然后您可以根据需要添加字段并执行上述命令。

4)python manage.py migrate apps.appname

然后将文件迁移到数据库。