web-dev-qa-db-fra.com

Comment réinitialiser db dans Django? Je reçois une commande 'reset' non trouvée erreur

Après ce Django par exemple tutoriel ici: http://lightbird.net/dbe/todo_list.html

Le tutoriel dit:

"Cela change la disposition de notre table et nous devrons demander à Django de réinitialiser Et de recréer les tables:

manage.py reset todo; manage.py syncdb"

cependant, quand je lance manage.py reset todo, j'obtiens l'erreur:

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

Est-ce parce que j'utilise sqlite3 et non pas postgresql?

Quelqu'un peut-il me dire quelle est la commande pour réinitialiser la base de données?

La commande: python manage.py sqlclear todo renvoie l'erreur:

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

J'ai donc ajouté 'todo' à mon INSTALLED_APPS dans settings.py et j'ai à nouveau lancé python manage.py sqlclear todo, ce qui a entraîné l'erreur suivante:

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

reset a été remplacé par flush par Django 1.5, voir:

python manage.py help flush
122
robertklep

Il semble que la réponse "flush" fonctionnera dans certains cas, mais pas dans tous les cas. J'avais besoin non seulement de vider les valeurs de la base de données, mais de recréer les tables correctement. Je n'utilise pas encore les migrations (premiers jours), alors je devais vraiment supprimer toutes les tables. 

J'ai trouvé deux façons de supprimer toutes les tables, toutes deux requièrent autre chose que le noyau Django.

Si vous êtes sur Heroku, supprimez toutes les tables avec pg: reset:

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

Si vous pouvez installer Django Extensions, il existe un moyen d'effectuer une réinitialisation complète: 

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

Semblable à la réponse de LisaD, Django Extensions a une excellente commande reset_db qui supprime tout, au lieu de simplement tronquer les tables comme le fait "flush". Vous devez spécifier un routeur, il peut donc ressembler à:

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

Le simple fait de vider les tables ne corrigeait pas une erreur persistante survenue lors de la suppression d'objets. Faire un reset_db corrige le problème.

17
aendrew

si vous utilisez Django 2.0 Alors

python manage.py flush 

marchera

12
Vaibhav Gupta

Avec Django 1.11, supprimez simplement tous les fichiers de migration du dossier migrations de chaque application (tous les fichiers sauf __init__.py). ensuite

  1. Supprimer manuellement la base de données.
  2. Créer manuellement la base de données.
  3. Exécutez python3 manage.py makemigrations.
  4. Exécutez python3 manage.py migrate.

Et voila, votre base de données a été complètement réinitialisée.

8
Gursimran Singh

Si vous souhaitez nettoyer toute la base de données, vous pouvez utiliser: python manage.py flush Si vous souhaitez nettoyer la table de base de données d'une application Django, vous pouvez utiliser: python manage.py migrate appname zéro

6
Abhijeet Padhy

Pour moi, cela a résolu le problème.

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

Juste un suivi de @ LisaD's answer.
À partir de 2016 (Django 1.9), vous devez taper:

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

Cela vous donnera une nouvelle base de données au sein de Heroku.

2
Jan

Si vous utilisez des migrations, ce link a plusieurs solutions en fonction du scénario.

1
Kandhan
  1. Supprimez simplement votre base de données manuellement. Assurez-vous de créer d'abord une sauvegarde (dans mon cas, db.sqlite3 est ma base de données)

  2. Exécutez cette commande manage.py migrate

0
Bikram Pandit
python manage.py flush

ancien contenu de la base de données supprimé,

N'oubliez pas de créer un nouveau superutilisateur:

python manage.py createsuperuser
0
Thusitha Deepal