2011-04-21 250 views
5

什麼是最好的解決辦法,如果我想升級(改變)我的數據庫架構沒有這些表中的數據丟失(加入他們只是Django模型新字段添加到表)? 「syncdb」當然不會添加它們,所以我需要你的建議如何在不刪除它們的情況下改變表格,並用syncdb重新創建。Django的:更新數據庫模式,而不會丟失數據

感謝, Ignas

回答

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?這個問題是相似的,並有可能我說的是信息。

還是讓我知道,如果你需要,我會挖我的舊腳本(或寫出一個漂亮簡單的一個),爲您服務。

UPDATE

./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(GAH!)在Django 1.3,你將不得不做./manage dbshelldrop table。該命令的sql可以從命令./manage.py sqlreset appname中找到。

+0

需要嘗試和玩它來熟悉,但聽起來很合理。當然,如果你有你提到的腳本並且可以共享,在編寫我自己的腳本之前先看看它是很好的:)但是肯定會嘗試使用它,謝謝! – 2011-04-21 06:14:12

+0

我假設你正在運行linux? – 2011-04-21 06:15:28

+0

Linux和Mac OS X. – 2011-04-21 06:17:38

相關問題