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
reset
a été remplacé par flush
par Django 1.5, voir:
python manage.py help flush
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
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.
si vous utilisez Django 2.0 Alors
python manage.py flush
marchera
Avec Django 1.11, supprimez simplement tous les fichiers de migration du dossier migrations
de chaque application (tous les fichiers sauf __init__.py
). ensuite
python3 manage.py makemigrations
.python3 manage.py migrate
.Et voila, votre base de données a été complètement réinitialisée.
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
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 @ 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.
Si vous utilisez des migrations, ce link a plusieurs solutions en fonction du scénario.
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)
Exécutez cette commande manage.py migrate
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