django:更新数据库模式而不会丢失数据

时间:2011-04-21 05:20:23

标签: django syncdb

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

谢谢, Ignas

3 个答案:

答案 0 :(得分:9)

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

./manage.py dumpdata appname

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

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

使用loaddata

加载备份

修改

Django dump data for a single model?这个问题类似,可能有我正在讨论的信息。

如果你需要我仍然可以告诉我,我会为你挖掘我的旧剧本(或写出一个简单的剧本)。

<强>更新

./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中的pre django 1.3(gah!),您必须执行./manage dbshelldrop table。可以从命令./manage.py sqlreset appname找到sql。

答案 1 :(得分:6)

答案 2 :(得分:1)

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

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