如何将NullableBooleanField添加到现有的Django数据库?

时间:2013-09-27 20:02:19

标签: python django django-models

我有一个包含一些数据的数据库。我将这些数据放入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: visible导入数据时出现initial_data.json错误消息。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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