2016-11-22 1 views
0

Django 1.9.7, db.sqlite3 als DBWie behebt man Migrationen für eine App mit bestehendem Schema, ohne andere Apps zu berühren?

Ich habe ein Django-Projekt mit mehreren Anwendungen. Für App "A" hatte ich Migrationen, aber ich löschte sie aus Versehen und schob sie auf den Remote-Git. Außerdem wurde tagsüber eine Menge neuer Sachen für andere Apps auf den git geschoben. Andere Apps sind nicht von den "A" -App-Modellen abhängig.

Alles funktionierte, bis ich entschied, ein neues Feld zum Modell der "A" -App hinzuzufügen. Ich habe OperationalError: no such column: Fehler erhalten. Ich habe versucht, erste Migrationen für die App "A" python manage.py migrate --fake-initial durchzuführen. Ich habe neue Migrationen, aber ich habe immer noch die OperationalError: no such column:.

Wie behebt man "A" -App-Migrationen, ohne die Migration anderer Apps zu beeinträchtigen?

+0

Können Sie nicht nur zu einem vorherigen Commit zurückkehren? – Sayse

+0

@Sayse Andere Leute, die andere Apps in diesem Projekt entwickeln, haben bereits neue Sachen hinzugefügt und einige Zusammenführungen gemacht. Ist es möglich, die Migrationen ohne git-revert zu beheben? – trex

Antwort

1

Von git Sicht, können Sie revert zu früheren Commit tun.

git revert sha #commit sha of the last commit 

ODER

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

Befestigung durch django (möglich, wenn Sie nicht später keine Migrationen hinzugefügt haben.),

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

Andere Leute, die andere Apps in diesem Projekt entwickeln, haben bereits neue Sachen hinzugefügt und einige Merges gemacht. Ist es möglich, die Migrationen ohne git-revert zu beheben? – trex

+0

Ich werde Django Weg versuchen – trex

0

Leider git revert half mir nicht. Am Ende löste ich das Problem, indem ich die folgenden Schritte durchführte:

1.Manuell lösche alle Tabellen, die mit der App "A" in db.sqlite3 verbunden sind.

2.Create neue Migrationen und db.sqlite3 Tabellen aus vorhandenen Schema:

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

3.Dump die Tabellen Daten zurück in db.sqlite3 aus einem Backup:

sqlite3 ~/Backup/A/db.sqlite3 ".dump table_name" | grep -v "CREATE" | sqlite3 db.sqlite3 
Verwandte Themen