it-swarm.com.de

Wie kann man db in Django zurücksetzen? Ich erhalte den Befehl "Reset", Fehler nicht gefunden

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
72
Prem

reset wurde mit Django 1.5 durch flush ersetzt, siehe:

python manage.py help flush
122
robertklep

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
27
LisaD

Ä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.

17
aendrew

wenn Sie Django 2.0 verwenden, dann

python manage.py flush 

wird funktionieren

12
Vaibhav Gupta

Löschen Sie bei Django 1.11 einfach alle Migrationsdateien aus dem Ordner migrations der jeweiligen Anwendung (alle Dateien außer __init__.py). Dann

  1. Datenbank manuell löschen.
  2. Datenbank manuell erstellen.
  3. Führen Sie python3 manage.py makemigrations aus.
  4. Führen Sie python3 manage.py migrate aus.

Und voilla, Ihre Datenbank wurde komplett zurückgesetzt.

8
Gursimran Singh

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

6
Abhijeet Padhy

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
4
yask

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.

2
Jan

Wenn Sie Migrationen verwenden, bietet dieser link je nach Szenario eine Reihe von Lösungen.

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

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

0
Bikram Pandit
python manage.py flush

alte db inhalte gelöscht,

Vergiss nicht, einen neuen Superuser anzulegen:

python manage.py createsuperuser
0
Thusitha Deepal