6

如果我想升级(更改)我的数据库模式(通过将新字段添加到 Django 模型中来将新字段添加到表中)而不丢失这些表中的数据,那么最好的解决方案是什么?“syncdb”当然不会添加它们,所以我需要你的建议,如何在不删除表的情况下更改表并使用 syncdb 重新创建。

4

3 回答 3

10

当南方不是一个选项时,我只是手动编写脚本进行小的更改。还有我用的大的

./manage.py dumpdata appname

http://docs.djangoproject.com/en/dev/ref/django-admin/#dumpdata-appname-appname-appname-model

将其放入文件中。运行正则表达式替换以更新任何添加/删除的字段,然后可以重置该应用程序。我不得不承认我有一段时间没有这样做了,但如果需要,我可以得到一些特定的代码来为你做这件事。

它加载备份loaddata

编辑

单个模型的 Django 转储数据? 这个问题是相似的,可能有我正在谈论的信息。

如果您需要,请告诉我,我会为您挖掘我的旧脚本(或写出一个不错的简单脚本)。

更新

./manage.py dumpdata appname --indent=4 > appname.json

#open your fav text editor and do a find/replace 

./manage.py reset appname
./manage.py loaddata appname.json

那应该这样做。当您执行查找替换时,您只需要删除您不再拥有的字段并添加不可为空的字段。(至少)。

注意: --indent=4 可以很好地为您格式化所有内容。这意味着4个空格。./manage.py 重置仅适用于 django 1.3 之前的 django 1.3 (gah!) 你将不得不做 a./manage dbshelldrop table. 可以从 command 中找到用于此的 sql ./manage.py sqlreset appname

于 2011-04-21T06:05:24.287 回答
1

Django 1.7 具有内置的迁移支持。

请参阅https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations

于 2014-01-30T18:34:37.907 回答