Comment réinitialiser la base de données dans Django? J'obtiens une erreur de commande 'reset' non trouvée


98

Suite à ce Django par exemple tutotrial ici: http://lightbird.net/dbe/todo_list.html

Le tutoriel dit:

«Cela change la disposition de nos tables et nous devrons demander à Django de réinitialiser et recréer les tables:

manage.py reset todo; manage.py syncdb"

cependant, quand je cours 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 la base de données?

La commande: python manage.py sqlclear todorenvoie 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 exécuté à python manage.py sqlclear todonouveau, ce qui a entraîné cette erreur:

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

Réponses:


153

reseta été remplacé par flushDjango 1.5, voir:

python manage.py help flush

4
Malheureusement, cela ne fonctionne pas sur des applications individuelles telles que manage.py reset <appname>. Il en résulte une erreur: CommandError: La commande n'accepte aucun argument
Andre

5
Heureusement, quelqu'un l'a porté à 1,5 :)
robertklep

merci, bon à savoir, la documentation publique récente (dernière modification il y a 6 mois) de django sur les luminaires (2019-07-11) parle encore de 'reset': code.djangoproject.com/wiki/Fixtures
vchrizz

34

Il semble que la réponse «flush» fonctionnera dans certains cas, mais pas dans tous. J'avais besoin non seulement de vider les valeurs de la base de données, mais de recréer correctement les tables. Je n'utilise pas encore de migrations (débuts) donc j'avais vraiment besoin de supprimer toutes les tables.

J'ai trouvé deux façons de supprimer toutes les tables, les deux nécessitent 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 les extensions Django, il existe un moyen de faire une réinitialisation complète:

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

6
@jonalv, vous devez d'abord installer django-extensions .
edjroot le

6
De plus, vous devez l'inclure sous INSTALLED_APPSdans settings.py.
Max Candocia

21

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

python ./manage.py reset_db

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


1
C'était ce que je cherchais, mais je n'ai pas eu à fournir d' --routerargument, peut-être que c'est facultatif maintenant, cinq ans plus tard? :)
damd


11

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 zero


9

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

  1. Supprimez manuellement la base de données.
  2. Créez manuellement la base de données.
  3. Courez python3 manage.py makemigrations.
  4. Courez python3 manage.py migrate.

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


si vous utilisez sqlite, pas besoin de créer manuellement la base de données, python3 manage.py makemigrationset python3 manage.py migrates'en chargera, au moins dans django 2.0
toto_tico

4

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

3

Juste un suivi de la réponse de @ 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.


1
  1. Supprimez simplement manuellement votre base de données. 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


1
python manage.py flush

ancien contenu de base de données supprimé,

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

python manage.py createsuperuser
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.