2008-10-06 46 views
27

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


PS:我想看看在一个地方额定许多解决方案。显然更多的解决方案已经上市here

回答

16

我问过类似的问题here,得到了相当多的答案。

有相当多的做,像手工做的倾销与SQL重装,使用固定装置或使用“新兴”模式进化包的Django的一个途径:

3

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

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

  1. 将新模型创建为新应用程序。创建测试,只是为了确保它能正常工作。
  2. syncdb构建这个新模型的临时实现。
  3. 编写一个一次性实用程序来查询您的旧模型,并加载您的新模型。您可能想要在纯SQL中尝试此操作。我更喜欢写一个简单的查询,编译并保存循环。
  4. 加载新模型后,您可以将其转储到JSON文件。

将数据从旧模型中拉出后,可以使用首选的新格式重建数据库。

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

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

看看here(向下滚动到“在更改数据库模式”)

23

另一种技术是使用dumpdata和loaddata参数进行管理。PY,在两者之间杀死你的数据库:

  1. python manage.py dumpdata > dump.json
  2. 借助外部工具,删除任何受影响的表,或全杀分贝
  3. python manage.py loaddata dump.json

manage.py docs更多。

+0

`蟒蛇manage.py sqlreset appname`打印必要的SQL语句,但不实际运行它们。 – 2008-10-17 13:07:12

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

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