Wie setze ich db in Django zurück? Ich erhalte den Befehl 'Reset' nicht gefunden Fehler


97

Folgen Sie diesem Django by Example-Tutotrial hier: http://lightbird.net/dbe/todo_list.html

Das Tutorial sagt:

"Dies ändert unser Tabellenlayout und wir müssen Django bitten, Tabellen zurückzusetzen und neu zu erstellen:

manage.py reset todo; manage.py syncdb""

Wenn ich jedoch laufe manage.py reset todo, erhalte ich den Fehler:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

Liegt das daran, dass ich sqlite3 und nicht postgresql verwende?

Kann mir jemand sagen, was der Befehl zum Zurücksetzen der Datenbank ist?

Der Befehl: python manage.py sqlclear todogibt 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 habe ich meinem INSTALLED_APPS in settings.py 'todo' hinzugefügt und es python manage.py sqlclear todoerneut ausgeführt, was zu folgendem Fehler führte:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined

Antworten:


151

resetwurde durch flushDjango 1.5 ersetzt, siehe:

python manage.py help flush

4
Leider funktioniert dies bei einzelnen Apps nicht, wie dies bei manage.py reset <appname> der Fall war. Es führt zu einem Fehler: CommandError: Befehl akzeptiert keine Argumente
Andre

5
Zum Glück hat es jemand auf 1.5
zurückportiert

danke, gut zu wissen, die jüngste (zuletzt vor 6 Monaten geänderte) öffentliche Django-Dokumentation über Fixtures (2019-07-11) spricht über 'Reset': code.djangoproject.com/wiki/Fixtures
vchrizz

34

Es sieht so aus, als würde die Antwort "Flush" in einigen, aber nicht in allen Fällen funktionieren. Ich musste nicht nur die Werte in der Datenbank leeren, sondern auch die Tabellen richtig neu erstellen. Ich verwende noch keine Migrationen (in den frühen Tagen), daher musste ich wirklich alle Tabellen löschen.

Ich habe zwei Möglichkeiten gefunden, alle Tabellen zu löschen. Beide erfordern etwas anderes als Core-Django.

Wenn Sie auf Heroku sind, 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, können Sie einen vollständigen Reset durchführen:

python ./manage.py reset_db --router=default

6
@jonalv, du musst zuerst django-extensions installieren .
Edjroot

6
Außerdem müssen Sie es haben eingeschlossen unter INSTALLED_APPSin settings.py.
Max Candocia

21

Ähnlich wie bei LisaDs Antwort verfügt Django Extensions über einen großartigen Befehl reset_db, mit dem alles vollständig gelöscht wird, anstatt nur die Tabellen wie bei "Flush" abzuschneiden.

python ./manage.py reset_db

Das bloße Leeren der Tabellen konnte keinen dauerhaften Fehler beheben, der beim Löschen von Objekten auftrat. Durch Ausführen einer reset_db wurde das Problem behoben.


1
Das war es, wonach ich gesucht habe, aber ich musste kein --routerArgument vorbringen, vielleicht ist das jetzt, fünf Jahre später, optional? :)
verdammt

17

Wenn Sie Django 2.0 verwenden, dann

python manage.py flush 

wird funktionieren


11

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 Folgendes verwenden: python manage.py migrate appname zero


9

Löschen Sie mit django 1.11 einfach alle Migrationsdateien aus dem migrationsOrdner jeder Anwendung (außer allen Dateien __init__.py). Dann

  1. Datenbank manuell löschen.
  2. Datenbank manuell erstellen.
  3. Lauf python3 manage.py makemigrations.
  4. Ausführen python3 manage.py migrate.

Und voilla, deine Datenbank wurde komplett zurückgesetzt.


Wenn Sie SQLite verwenden, müssen Sie die Datenbank nicht manuell erstellen python3 manage.py makemigrationsund python3 manage.py migratekümmern sich darum, zumindest in Django 2.0
toto_tico

4

Für mich löste dies das Problem.

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

3

Nur eine Fortsetzung der Antwort von @ LisaD .
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 Datenbank in Heroku.


1
  1. Löschen Sie einfach Ihre Datenbank manuell. Stellen Sie sicher, dass Sie zuerst ein Backup erstellen (in meinem Fall ist db.sqlite3 meine Datenbank).

  2. Führen Sie diesen Befehl aus manage.py migrate


1
python manage.py flush

alte Datenbankinhalte gelöscht,

Vergessen Sie nicht, einen neuen Superuser zu erstellen:

python manage.py createsuperuser
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.