29

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


PS:我想在一个地方看到许多解决方案的评级。显然这里已经列出了更多的解决方案。

4

6 回答 6

24

另一种技术是在 manage.py 中使用 dumpdata 和 loaddata 参数,在中间杀死你的数据库:

  1. python manage.py dumpdata > dump.json
  2. 使用外部工具,删除任何受影响的表,或杀死整个数据库
  3. python manage.py loaddata dump.json

有关更多信息,请参阅manage.py 文档

于 2008-10-16T18:31:29.047 回答
18

我在这里问了一个类似的问题并得到了很多答案。

有很多方法可以做到这一点,例如使用 SQL 手动执行转储和重新加载,使用固定装置或使用 Django 的“新兴”模式演变包之一:

于 2008-10-06T21:23:41.807 回答
3

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

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

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

从旧模型中提取数据后,您可以以首选的新格式重建数据库。

  1. 将新模型移动到现有应用程序中。
  2. 删除应用程序表的旧版本。
  3. syncdb 来构建新表。
  4. 使用数据加载 JSON 文件。
于 2008-10-06T20:23:35.237 回答
3

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

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

于 2014-09-11T22:07:18.277 回答
2

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

看看这里(向下滚动到“对数据库模式进行更改”)

于 2008-10-06T20:28:28.363 回答
0

Perform these steps in order may help you

For more details,

点击这里: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

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

于 2013-10-25T10:06:21.687 回答