我有一个包含一些数据的数据库。我将这些数据放入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 Evolution,South或其他什么?
答案 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中进行数据库迁移。