Es gibt zwei Modelle Groups und Students und nur eine Tabelle für Groups. Die Students-Tabelle wurde gelöscht.
Wie kann Django es wieder herstellen? Wenn ich Makemigrationen mache, wird "Keine Änderungen festgestellt" ausgegeben.
Wenn ich auf der Admin-Seite auf die Schülertabelle klicke, wird eine Ausnahme ausgelöst:
relation "students_students" does not exist
Ich habe gerade meinen Migrationsordner gelöscht, die gesamte Datenbank gelöscht und dann die Migration für die App durchgeführt
python3 manage.py makemigration
python3 manage.py migrate
und es kam zurück.
In Django 1.7 können Sie versuchen:
1. Delete your migrations folder
2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations
4. python manage.py migrate --fake
Wenn Sie in Django 1.9.5 arbeiten, ist dies die 100% ige Lösung für dieses Problem:
1. Delete your migrations folder
2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations app_name
4. python manage.py migrate
Das funktioniert bei mir zu 100%!
Es gibt keine einfache Möglichkeit, Django dazu zu bringen, eine Tabelle neu zu erstellen, die Sie manuell gelöscht haben. Sobald Ihre Datenbank manuell geändert wurde, weicht Djangos Ansicht der Datenbank (von Migrationen) von der Realität ab und es kann schwierig sein, sie zu beheben.
Wenn Sie den Befehl sqlmigrate ausführen, wird der zum Erstellen der Tabelle erforderliche SQL-Code angezeigt. Sie können die SQL in einer Datenbank-Shell ausführen. Angenommen, Ihr App-Name ist students
und die Migration, die die Tabelle erstellt hat, war 00XX_create_students.py
, dann würden Sie Folgendes tun:
./manage.py sqlmigrate students 00XX_create_students
Seien Sie vorsichtig, wenn Fremdschlüssel zur oder von der Schülertabelle vorhanden sind. Die Einschränkungen müssen ebenfalls erstellt werden.
Für Django 2 mache folgendes:
1. Delete your migrations folder
2. In the database: `DELETE FROM Django_migrations WHERE app = 'app_name';`
3. python manage.py makemigrations app_name
4. python manage.py migrate
5. python manage.py migrate --fake default //This was the key to solve my problem
Benennen Sie den gelöschten Tabellennamen in der Datei models.py in some_new_name um und führen Sie Folgendes aus:
python3 manage.py makemigration
python3 manage.py migrate
benennen Sie die Tabelle some_new_name erneut in den ursprünglichen Namen um und führen Sie sie aus
python3 manage.py makemigration
python3 manage.py migrate
gehen Sie schließlich zur Datenbankshell und löschen Sie die Tabelle some_new_name
Für Django 1.10.4 habe ich die Datei db.sqlite3 aus dem Projektordner gelöscht und dann die folgenden Befehle ausgeführt:
Django 1.11.2 mit MariaDB, versehentliches Löschen der Datenbanktabelle. Versuchen Sie Folgendes, um eine Tabelle neu zu erstellen: 1/Löschen Sie alle Elemente mit Ausnahme von init . Py in Ihrem Verzeichnis app/migrations. 2/Wählen Sie * aus Django_migrations aus. lösche von Django_migrations wo app = 'yourapp'; 3/Überprüfen Sie, ob Ihr Modell in Ordnung ist, und führen Sie Folgendes aus: python manage.py makemigrations 4/python manage.py migrate
Funktioniert bei mir!
Die Antwort, die für mich funktioniert hat, lautet wie folgt:
Angenommen, in Ihrer Datenbank wurde eine Tabelle eines Modells gelöscht und Sie müssen sie neu erstellen. Führen Sie dann die folgenden Schritte aus.
kommentieren Sie das Modell in models.py aus, das die gelöschte Tabelle erstellt (entweder die Modellklasse oder eine Zeile, die eine Tabelle wie a = models.ManyToManyField(...)
erstellt).
lauf: python manage.py makemigrations <app-name>
, wo <app-name>
ist der Name der App, in der Sie models.py haben
lauf: python manage.py migrate --fake <app-name>
kommentieren Sie das Modell in models.py
lauf: python manage.py makemigrations <app-name>
lauf: python manage.py migrate <app-name>
(ohne --fake)
und du solltest die tabelle wieder in der datenbank haben. Alle in der Tabelle enthaltenen Daten gehen jedoch verloren.
Ich erstelle Tabelle manuell und es hilft.