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
Prem
la source
Double possible de Quelle est la manière la plus simple d'effacer une base de données de la CLI avec manage.py dans Django?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

153

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

python manage.py help flush
robertklep
la source
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
LisaD
la source
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.

aendrew
la source
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
17

si vous utilisez Django 2.0 Alors

python manage.py flush 

marchera

Vaibhav Gupta
la source
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

Abhijeet Padhy
la source
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.

Gursimran Singh
la source
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
yask
la source
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.

Jan
la source
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

bikram
la source
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
Thusitha Deepal
la source