Come resettare db in Django? Ricevo un comando "reset" non trovato errore


99

Seguendo questo Django di Example tutotrial qui: http://lightbird.net/dbe/todo_list.html

Il tutorial dice:

"Questo cambia il layout della nostra tabella e dovremo chiedere a Django di reimpostare e ricreare le tabelle:

manage.py reset todo; manage.py syncdb"

tuttavia, quando corro manage.py reset todo, ottengo l'errore:

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

È perché sto usando sqlite3 e non postgresql?

Qualcuno può dirmi qual è il comando per ripristinare il database?

Il comando: python manage.py sqlclear todorestituisce l'errore:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

Quindi ho aggiunto "todo" al mio INSTALLED_APPS in settings.py e sono corso di python manage.py sqlclear todonuovo, provocando questo errore:

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

Risposte:


154

resetè stato sostituito da flushcon Django 1.5, vedere:

python manage.py help flush

4
Purtroppo questo non funziona su singole app come ha fatto il reset di manage.py <appname>. Risulta in un errore: CommandError: Command non accetta alcun argomento
Andre

5
Per fortuna, qualcuno l'ha riportato a 1.5 :)
robertklep

grazie, buono a sapersi, recente (ultima modifica 6 mesi fa) documentazione pubblica django sui dispositivi ancora (2019-07-11) parla di 'reset': code.djangoproject.com/wiki/Fixtures
vchrizz

34

Sembra che la risposta "flush" funzionerà per alcuni, ma non per tutti i casi. Avevo bisogno non solo di svuotare i valori nel database, ma di ricreare correttamente le tabelle. Non sto ancora utilizzando le migrazioni (primi giorni), quindi avevo davvero bisogno di eliminare tutte le tabelle.

Ho scoperto due modi per eliminare tutte le tabelle, entrambi richiedono qualcosa di diverso dal core django.

Se sei su Heroku, elimina tutte le tabelle con pg: reset:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

Se puoi installare Django Extensions, ha un modo per eseguire un ripristino completo:

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

6
@jonalv, devi prima installare django-extensions .
edjroot

6
Inoltre, è necessario includerlo INSTALLED_APPSin settings.py.
Max Candocia

21

Simile alla risposta di LisaD, Django Extensions ha un ottimo comando reset_db che elimina completamente tutto, invece di troncare semplicemente le tabelle come fa "flush".

python ./manage.py reset_db

Il semplice svuotamento delle tabelle non risolveva un errore persistente che si verificava durante l'eliminazione degli oggetti. L'esecuzione di un reset_db ha risolto il problema.


1
Questo era quello che stavo cercando, ma non dovevo fornire un --routerargomento, forse è facoltativo ora, cinque anni dopo? :)
dannato


11

Se vuoi pulire l'intero database, puoi usare: python manage.py flush Se vuoi pulire la tabella del database di un'app Django, puoi usare: python manage.py migrate appname zero


9

Con django 1.11, elimina semplicemente tutti i file di migrazione dalla migrationscartella di ciascuna applicazione (tutti i file tranne __init__.py). Poi

  1. Elimina manualmente il database.
  2. Crea manualmente il database.
  3. Corri python3 manage.py makemigrations.
  4. Corri python3 manage.py migrate.

E voilla, il tuo database è stato completamente ripristinato.


se si utilizza sqlite, non è necessario creare manualmente il database python3 manage.py makemigrationse se python3 manage.py migratene occuperà, almeno in django 2.0
toto_tico

4

Per me questo ha risolto il problema.

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

Solo un seguito alla risposta di @ LisaD .
A partire dal 2016 ( Django 1.9), è necessario digitare:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

Questo ti darà un nuovo database fresco all'interno di Heroku.


1
  1. Basta eliminare manualmente il database. Assicurati di creare prima il backup (nel mio caso db.sqlite3 è il mio database)

  2. Esegui questo comando manage.py migrate


1
python manage.py flush

cancellato il vecchio contenuto del db,

Non dimenticare di creare un nuovo superutente:

python manage.py createsuperuser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.