Autant que je sache, il n'y a pas de commande de gestion pour supprimer toutes les tables. Si cela ne vous dérange pas de pirater Python, vous pouvez écrire votre propre commande personnalisée pour le faire. Vous pouvez trouver l' sqlclear
option intéressante. La documentation indique que ./manage.py sqlclear
Imprime les instructions SQL DROP TABLE pour le (s) nom (s) d'application donné (s).
Mise à jour : S'approprier sans vergogne le commentaire de @Mike DeSimone sous cette réponse pour donner une réponse complète.
./manage.py sqlclear | ./manage.py dbshell
Depuis django 1.9 c'est maintenant ./manage.py sqlflush
./manage.py sqlclear myAppName | ./manage.py dbshell
Il n'y a pas de commande de gestion native de Django pour supprimer toutes les tables. Les deux
sqlclear
etreset
nécessitent un nom d'application.Cependant, vous pouvez installer Django Extensions qui vous donne
manage.py reset_db
, qui fait exactement ce que vous voulez (et vous donne accès à de nombreuses commandes de gestion plus utiles).la source
manage.py reset_db
besoin de l'indicateur `-c, --close-sessions` pour fermer les connexions à la base de données avant de supprimer la base de données (PostgreSQL uniquement)Si vous utilisez le package South pour gérer les migrations de bases de données (fortement recommandé), vous pouvez simplement utiliser la
./manage.py migrate appname zero
commande.Sinon, je recommanderais la
./manage.py dbshell
commande, piping dans les commandes SQL sur l'entrée standard.la source
python manage.py migrate <app> zero
sqlclear
a été supprimé de 1.9.Les notes de publication mentionnent que cela est dû à l'introduction de migrations: https://docs.djangoproject.com/en/1.9/releases/1.9/
Malheureusement, je n'ai pas trouvé de méthode qui fonctionne sur toutes les applications à la fois, ni de moyen intégré de répertorier toutes les applications installées depuis l'administrateur: Comment répertorier toutes les applications installées avec manage.py dans Django?
En relation: Comment réinitialiser les migrations dans Django 1.7?
la source
Il est préférable de l'utiliser
./manage.py sqlflush | ./manage.py dbshell
car sqlclear nécessite l'application pour vider.la source
façon simple (?) de le faire à partir de python (sur mysql):
la source
Si vous souhaitez effacer complètement la base de données et la resynchroniser de la même manière, vous avez besoin de quelque chose comme ce qui suit. Je combine également l'ajout de données de test dans cette commande:
Ce serait bien de pouvoir le faire
cursor.execute(call_command('sqlclear', 'main'))
maiscall_command
imprime le SQL sur stdout plutôt que de le renvoyer sous forme de chaîne, et je ne peux pas travailler sur lesql_delete
code ...la source
USE DATABASE
Je vous recommandons de créer un package django-Recréer-db avec une commande de gestion qui basculera automatiquement en fonction des paramètres pour basculer entre les SQLite3 et Postgresql.Voici un script shell que j'ai fini par assembler pour résoudre ce problème. J'espère que cela fera gagner du temps à quelqu'un.
la source
En utilisant Python pour créer une commande flushproject, vous utilisez:
la source
flushdb
et après j'ai lancé une autre commande. si vous en avez besoin dans un autre script, vous pouvez utilisercall_command
call_command
. Vous dites que je devrais fairecall_command("flushdb")
avantcall_command("syncdb")
?La commande
./manage.py sqlclear
ou./manage.py sqlflush
semble effacer la table et ne pas les supprimer, si vous souhaitez supprimer la base de données complète , essayez ceci:manage.py flush
.Attention: cela supprimera complètement votre base de données et vous perdrez toutes vos données, donc si cela n'est pas important, essayez-le.
la source
Voici un exemple de Makefile pour faire de belles choses avec plusieurs fichiers de paramètres:
Ensuite, vous pouvez faire des choses comme:
$ make db_reset
la source
Cette réponse est pour postgresql DB:
Exécuter: echo 'drop appartenant à some_user ' | ./manage.py dbshell
REMARQUE: some_user est le nom de l'utilisateur que vous utilisez pour accéder à la base de données, voir le fichier settings.py:
la source
Si vous utilisez psql et que django-more 2.0.0 est installé, vous pouvez faire
manage.py reset_schema
la source
Voici une version de migration vers le sud de la réponse de @ peter-g. Je joue souvent avec le sql brut, donc cela est pratique sous le nom 0001_initial.py pour toutes les applications déroutées. Cela ne fonctionnera que sur les bases de données prenant en charge
SHOW TABLES
(comme mysql). Remplacez quelque chose commeSELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
si vous utilisez PostgreSQL. De plus, je fais souvent exactement la même chose pour les migrationsforwards
etbackwards
.Cependant, mes collègues / cocodeurs me tueraient s'ils savaient que je faisais ça.
la source
Il existe une réponse encore plus simple si vous souhaitez supprimer TOUTES vos tables. Vous allez simplement dans votre dossier contenant la base de données (qui peut être appelé mydatabase.db) et cliquez avec le bouton droit sur le fichier .db et appuyez sur «supprimer». Manière à l'ancienne, sûr de travailler.
la source
Supprime toutes les tables et les recrée:
Explication:
manage.py sqlclear
- "imprime les instructions SQL DROP TABLE pour le (s) nom (s) d'application donné (s)"sed -n "2,$p"
- attrape toutes les lignes sauf la première lignesed -n "$ !p"
- attrape toutes les lignes sauf la dernière lignesed "s/";/" CASCADE;/"
- remplace tous les points-virgules (;) par (CASCADE;)sed -e "1s/^/BEGIN;/" -e "$s/$/COMMIT;/"
- insère (BEGIN;) comme premier texte, insère (COMMIT;) comme dernier textemanage.py dbshell
- "Exécute le client de ligne de commande pour le moteur de base de données spécifié dans votre paramètre ENGINE, avec les paramètres de connexion spécifiés dans vos paramètres USER, PASSWORD, etc."manage.py syncdb
- "Crée les tables de base de données pour toutes les applications dans INSTALLED_APPS dont les tables n'ont pas déjà été créées"Dépendances:
Crédits:
@Manoj Govindan et @Mike DeSimone pour sqlclear canalisés vers dbshell
@jpic pour 'sed "s /"; / "CASCADE; /"'
la source
utilisez la commande "python manage.py sqlflush" dans Windows 10 pour les autres tapez manage.py
la source
Je vous recommande d'installer django-extensions et d'utiliser la
python manage.py reset_db
commande. Il fait exactement ce que vous voulez.la source