0

我有一个包含一些数据的数据库。我将这些数据放入一个 JSON 文件(C:\Python25\python manage.py dumpdata > initial_data.json )。

然后我在我的一个模型中添加了以下字段:

visible = models.NullBooleanField(null=True, blank=True, default=False)

当我运行时,它会在尝试从中导入数据时C:\Python25\python manage.py syncdb产生错误消息DatabaseError: Could not load opinions.Topic(pk=1): no such column: visibleinitial_data.json错误消息。

如何在不丢失数据的情况下将可为空的布尔字段添加到现有数据库?

更新 1:显然,我不是第一个遇到这个问题的人。哪个数据库迁移机制更好 - Django EvolutionSouth还是其他?

4

1 回答 1

2

你在这里问的是数据库迁移。syncdb可能是一个糟糕的管理命令名称,因为它实际上并不同步数据库,而只是创建表。

目前,事实上的 Django 迁移标准是South。它允许执行这些称为迁移的事情,这些迁移基本上将您的模型与数据库同步,而不会丢失任何数据。将 South 引入您的项目将允许您完全添加/更改/重命名/删除字段或表,而无需处理固定装置。如果您是 South 的新手,它有非常好的文档,所以您按照本教程应该没有问题。我能看到的唯一警告是您使用的是 Windows,这可能是一个问题(不确定)。

现在你应该使用 South 但是 Andrew Godwin 是 South 的开发人员和 Django 核心开发人员,他实际上正在致力于将数据库迁移直接引入 Django。这个项目几乎完成了,并且已经与 Github 的 Django master 分支合并。它将与 Django 1.7 一起发布,计划于 2014 年初的某个时间发布。所以现在使用 South 但是从 Django 1.7 开始,您将能够直接在 Django 中进行数据库迁移。

于 2013-09-27T20:58:25.270 回答