2016-11-22 96 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 
相关问题