Comment réinitialiser db dans Django? Je reçois une commande 'reset' erreur introuvable
Suivant ce Django par Exemple tutotrial 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 recréer des tables:
manage.py reset todo; manage.py syncdb
"
Bien, 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 postgresql?
Quelqu'un Peut-il me dire quelle est la commande pour réinitialiser le base de données?
La commande: python manage.py sqlclear todo
retourne 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 a couru python manage.py sqlclear todo
à nouveau, résultant en cette erreur:
$ python manage.py sqlclear todo
- NameError: name 'admin' is not defined
9 réponses
reset
a été remplacé par flush
avec Django 1.5, voir:
python manage.py help flush
Il semble que la réponse' flush ' fonctionnera pour certains, mais pas tous les cas. J'avais besoin non seulement de vider les valeurs dans la base de données, mais de recréer les tables correctement. Je n'utilise pas encore les migrations (au début), donc j'avais vraiment besoin de laisser tomber toutes les tables.
Deux façons que j'ai trouvées pour supprimer toutes les tables, les deux nécessitent autre chose que Core 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 des Extensions Django, il a un moyen de faites une réinitialisation complète:
python ./manage.py reset_db --router=default
Similaire à la réponse de LisaD, Django Extensions a une excellente commande reset_db qui supprime totalement tout, au lieu de simplement tronquer les tables comme le fait "flush". Vous devez spécifier un routeur, il peut ressembler à:
python ./manage.py reset_db --router=default
Le simple vidage des tables ne corrigeait pas une erreur persistante survenue lorsque je supprimais des objets. Faire un reset_db a corrigé le problème.
Si vous utilisez Django 2.0 Alors
python manage.py flush
Fonctionnera
Avec django 1.11, supprimez simplement tous les fichiers de migration du dossier migrations
de chaque application (tous les fichiers sauf __init__.py
). Alors
- supprimer manuellement la base de données.
- créer manuellement la base de données.
- Exécuter
python3 manage.py makemigrations
. - Exécuter
python3 manage.py migrate
.
Et voilla, votre base de données a été complètement réinitialisée.
Si vous voulez nettoyer toute la base de données, vous pouvez utiliser: python manage.py rincer Si vous souhaitez nettoyer la table de base de données D'une application Django, vous pouvez utiliser: python manage.py migrer appname zéro
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
Juste un suivi de la réponse @LisaD.
À 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 dans Heroku.