如果我想升级(更改)我的数据库模式(通过将它们添加到django模型中来向表添加新字段)而不丢失这些表中的数据,那么最佳解决方案是什么? “syncdb”当然没有添加它们,所以我需要你的建议如何更改表而不删除它们并使用syncdb重新创建。
谢谢, Ignas
答案 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 dbshell
和drop table
。可以从命令./manage.py sqlreset appname
找到sql。
答案 1 :(得分:6)
学习曲线......
<击> http://south.aeracode.org/ 击>
南was merged into django core at version 1.7。
现在有a native django feature for data migration on schema changes。
答案 2 :(得分:1)
Django 1.7具有内置的迁移支持。
请参阅https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations