2016-11-22 35 views
0

Django的1.9.7,db.sqlite3爲DB如何修復具有現有架構的應用程序的遷移,但未觸及其他應用程序?

我有幾個應用程序一個Django項目。對於應用程序「A」,我有遷移,但我意外刪除了它們,並推送到遠程git。而且,其他應用程序的許多新功能在白天被推送到git。其他應用程序不依賴於「A」應用程序模型。

一切工作,直到我決定添加一個新的領域的模型的「A」應用程序。我得到了OperationalError: no such column:錯誤。我試圖爲應用「A」python manage.py migrate --fake-initial進行初始遷移。我有新的遷移,但我仍然有OperationalError: no such column:

如何解決「A」應用程序遷移而不影響其他應用程序遷移?

+0

你不只是恢復到以前的提交? – Sayse

+0

@Sayse在這個項目中開發其他應用程序的其他人已經添加了一些新的東西,並進行了一些合併。是否有可能修復遷移沒有git恢復? – trex

回答

1

git的角度來看,你可以做revert到以前的提交。

git revert sha #commit sha of the last commit 

OR

git reset --hard HEAD~n #n how many commits to remove. 
git push --force 

通過Django的固定(有可能,如果你後來沒有添加任何遷移。),

python manage.py makemigrations APP_A --empty 
python manage.py makemigrations APP_A 
python manage.py migrate --fake 
+0

在這個項目中開發其他應用程序的其他人已經添加了一些新的東西,並進行了一些合併。是否有可能修復遷移沒有git恢復? – trex

+0

我會嘗試Django的方式 – trex

0

可惜git revert沒有幫助我。最後,我通過執行以下步驟來解決問題:

1.手動刪除與db.sqlite3中的「A」應用程序相關的所有表。

2.創建新的遷移,並從現有架構db.sqlite3表:

python manage.py makemigrations A --empty 
python manage.py makemigrations A 
python manage.py migrate 

3.Dump的表中的數據回從備份db.sqlite3:

sqlite3 ~/Backup/A/db.sqlite3 ".dump table_name" | grep -v "CREATE" | sqlite3 db.sqlite3 
相關問題