Im Anschluss an dieses Django von Beispiel tutotrial hier: http://lightbird.net/dbe/todo_list.html
Das Tutorial sagt:
"Dies ändert unser Tabellenlayout und wir müssen Django bitten, .__ zurückzusetzen und Tabellen neu zu erstellen:
manage.py reset todo; manage.py syncdb
"
wenn ich jedoch manage.py reset todo
starte, erhalte ich die Fehlermeldung:
$ python manage.py reset todo
- Unknown command: 'reset'
Liegt das daran, dass ich sqlite3 und kein postgresql verwende?
Kann mir jemand sagen, was der Befehl zum Zurücksetzen der Datenbank ist?
Der Befehl: python manage.py sqlclear todo
gibt den Fehler zurück:
$ python manage.py sqlclear todo
CommandError: App with label todo could not be found.
Are you sure your INSTALLED_APPS setting is correct?
Also fügte ich meinem INSTALLED_APPS in settings.py 'todo' hinzu und führte erneut python manage.py sqlclear todo
aus, was zu diesem Fehler führte:
$ python manage.py sqlclear todo
- NameError: name 'admin' is not defined
reset
wurde mit Django 1.5 durch flush
ersetzt, siehe:
python manage.py help flush
Es sieht so aus, als würde die Flush-Antwort für einige Fälle funktionieren, jedoch nicht für alle Fälle. Ich musste nicht nur die Werte in der Datenbank leeren, sondern die Tabellen ordnungsgemäß neu erstellen. Ich verwende noch keine Migrationen (frühe Tage), also musste ich wirklich alle Tabellen löschen.
Ich habe zwei Möglichkeiten gefunden, alle Tische abzulegen, beide erfordern etwas anderes als Core-Django.
Wenn Sie sich in Heroku befinden, löschen Sie alle Tabellen mit pg: reset:
heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb
Wenn Sie Django Extensions installieren können, haben Sie die Möglichkeit, einen vollständigen Reset durchzuführen:
python ./manage.py reset_db --router=default
Ähnlich wie bei LisaDs Antwort hat Django Extensions einen großartigen reset_db-Befehl, der alles komplett verwirft, anstatt die Tabellen einfach abzuschneiden, wie dies bei "Flush" der Fall ist. Sie müssen einen Router angeben, so dass es wie folgt aussehen kann:
python ./manage.py reset_db --router=default
Durch das reine Spülen der Tabellen wurde kein permanenter Fehler behoben, der beim Löschen von Objekten auftrat. Mit einem reset_db wurde das Problem behoben.
wenn Sie Django 2.0 verwenden, dann
python manage.py flush
wird funktionieren
Löschen Sie bei Django 1.11 einfach alle Migrationsdateien aus dem Ordner migrations
der jeweiligen Anwendung (alle Dateien außer __init__.py
). Dann
python3 manage.py makemigrations
aus.python3 manage.py migrate
aus.Und voilla, Ihre Datenbank wurde komplett zurückgesetzt.
Wenn Sie die gesamte Datenbank bereinigen möchten, können Sie Folgendes verwenden: python manage.py flush Wenn Sie die Datenbanktabelle einer Django-App bereinigen möchten, können Sie: python manage.py migrieren appname null
Für mich hat das das Problem gelöst.
heroku pg:reset DATABASE_URL
heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate
Nur ein Follow-up zu @ LisaDs answer.
Ab 2016 (Django 1.9
) müssen Sie Folgendes eingeben:
heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate
Dadurch erhalten Sie eine neue, neue Datenbank in Heroku.
Wenn Sie Migrationen verwenden, bietet dieser link je nach Szenario eine Reihe von Lösungen.
Löschen Sie einfach Ihre Datenbank manuell. Stellen Sie sicher, dass Sie zuerst ein Backup erstellen (in meinem Fall db.sqlite3 ist meine Datenbank)
Führen Sie diesen Befehl aus manage.py migrate
python manage.py flush
alte db inhalte gelöscht,
Vergiss nicht, einen neuen Superuser anzulegen:
python manage.py createsuperuser