什麼是最好的解決辦法,如果我想升級(改變)我的數據庫架構沒有這些表中的數據丟失(加入他們只是Django模型新字段添加到表)? 「syncdb」當然不會添加它們,所以我需要你的建議如何在不刪除它們的情況下改變表格,並用syncdb重新創建。Django的:更新數據庫模式,而不會丟失數據
感謝, Ignas
什麼是最好的解決辦法,如果我想升級(改變)我的數據庫架構沒有這些表中的數據丟失(加入他們只是Django模型新字段添加到表)? 「syncdb」當然不會添加它們,所以我需要你的建議如何在不刪除它們的情況下改變表格,並用syncdb重新創建。Django的:更新數據庫模式,而不會丟失數據
感謝, Ignas
當南是不是一種選擇,我只是手工編寫腳本的微小變化。和大的我使用
./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 dbshell
和drop table
。該命令的sql可以從命令./manage.py sqlreset appname
中找到。
學習曲線...
南was merged into django core at version 1.7。
現在有a native django feature for data migration on schema changes。
正確 - 學習曲線:)感謝您的鏈接。 – 2011-04-21 05:29:30
的Django 1.7內置了遷移的支持。
請參閱https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations
需要嘗試和玩它來熟悉,但聽起來很合理。當然,如果你有你提到的腳本並且可以共享,在編寫我自己的腳本之前先看看它是很好的:)但是肯定會嘗試使用它,謝謝! – 2011-04-21 06:14:12
我假設你正在運行linux? – 2011-04-21 06:15:28
Linux和Mac OS X. – 2011-04-21 06:17:38