Django: Comment désinstaller complètement une application Django?

109

Quelle est la procédure pour désinstaller complètement une application Django, avec suppression de la base de données?

zer0stimulus
la source
supprimez ce nom d'application des applications installées settings.py, puis supprimez tout lien vers cette application du fichier principal urls.py. Ensuite, vous pouvez supprimer cette application en toute sécurité
Aseem
Si vous êtes dans le développement en utilisant SQLite et vous ne me dérange pas réinitialiser la base de données, est - il correct de simplement supprimer le dossier de l' application et db.sqlite3, et retirez- INSTALLED_APPSen settings.py?
Kevin

Réponses:

150
  1. Django <1.7 a une commande de gestion pratique qui vous donnera le SQL nécessaire pour supprimer toutes les tables d'une application. Consultez la documentation sqlclear pour plus d'informations. Fondamentalement, l'exécution ./manage.py sqlclear my_app_namevous permet d'obtenir les instructions SQL qui doivent être exécutées pour éliminer toutes les traces de l'application dans votre base de données. Vous devez toujours copier et coller (ou diriger) ces instructions dans votre client SQL. Pour Django 1.7 et plus, utilisez ./manage.py migrate my_app_name zero(voir la documentation de migrate ), qui exécute automatiquement le nettoyage de la base de données.

  2. Pour supprimer l'application de votre projet, il vous suffit de la supprimer de celle de INSTALLED_APPSvotre projet settings.py. Django ne chargera plus l'application.

  3. Si vous ne voulez plus que les fichiers de l'application traînent, supprimez le répertoire de l'application de votre répertoire de projet ou d'un autre emplacement sur votre PYTHONPATH où il réside.

  4. (facultatif) Si l'application stockait des fichiers multimédias, des fichiers de cache ou d'autres fichiers temporaires quelque part, vous souhaiterez peut-être les supprimer également. Méfiez-vous également des données de session persistantes qui pourraient être restées de l'application.

  5. (facultatif) Je supprimerais également tous les types de contenu périmés.

Ainsi.

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    if not c.model_class():
        print "deleting %s"%c # print(f"deleting {c}") # for Python 3.6+
        c.delete()
Gabriel Hurley
la source
5
Excellente réponse, juste un ajout que je ferais: pip uninstall nom-package est votre ami, beaucoup plus agréable que de traîner autour de votre PYTHONPATH.
DaveJ
25
Sur Django 1.7, si vous utilisez la migration, l'étape 1 sera ./manage.py migrate my_app_name zero. Et il exécutera également automatiquement le SQL.
Nathan Do
12
sqlcleara été supprimé dans Django 1.9 donc cette réponse n'est valable que pour les versions précédentes. Voir: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus
7
Si l'application en cours de suppression comporte des migrations, dont dépendent les migrations d'autres applications, le système de migration tombera en panne lorsqu'il verra que ces migrations dépendantes n'existent plus. Soyez prudent lorsque vous utilisez la réponse ci-dessus si l'application à supprimer est une dépendance dans l'historique de migration d'une autre de vos applications.
Filip Kilibarda
1
Et pour être complet, vous devrez généralement supprimer une référence à include("appname.urls")du projeturls.py
nigel222
16
  1. commenter settings.pydans INSTALLED_APPSla ligne de l'application inutile
  2. supprimer tous les dossiers __pycache__et migrateà votre projet
  3. supprimer le modèle inutile dans models.py
  4. supprimer tous les liens d' importation dans views.py, admin.pyfin, etc.
  5. supprimer tous les liens dans urls.pyvos applications inutiles
  6. dans la base de données, supprimez les tables inutiles associées à l'application (je le fais avec le programme d'aide "Valentina Studio")
  7. supprimer le dossier de l'application
  8. en ligne de commande, faites-le: python manage.py migrateetpython manage.py syncdb
Vadim
la source
3

L'application django est un «ensemble» de fichiers * .py et un répertoire avec un nom d'application-django. Ainsi, vous pouvez simplement supprimer tout le dossier avec tous les fichiers * .py

Pour "supprimer" des tables de la base de données, vous devez utiliser DELETE FROM <app-name_table-names>

De plus, vous devez supprimer les lignes avec le nom de l'application de setting.py dans un répertoire racine

V-Lumière
la source
En supposant que vous ne partagez pas la base de données avec une autre application, vous pouvez simplement déposer la base de données nommée dans settings.py.
joel3000
chaque application a sa propre base de données - pas mal
V-Light
3
@ V-Light, chaque application a sa propre table et chaque projet a sa propre base de données.
Alireza Savand
3

Dans mon contexte les projets existent plusieurs fois: j'ai un système de développement, certains coéquipiers ont un système de développement, il y a un système de mise en scène pour le client et un système de production. Cela signifie que je ne veux pas exécuter de commandes sql à la main. Je veux que ce soit automatisé.

Objectif: supprimer l'application et toutes les tables de la base de données.

Étape 1: videz l'application, mais laissez-la installée

supprimer tous les fichiers de l'application, sauf le dossier "migrations"

Exécutez cette commande: manage.py makemigrations -n drop_all_tables my_app_to_remove

Le répertoire ressemble maintenant à ceci:

my_app_to_remove/
my_app_to_remove/__init__.py
my_app_to_remove/migrations
my_app_to_remove/migrations/0001_initial.py
my_app_to_remove/migrations/....
my_app_to_remove/migrations/0030_drop_all_tables.py
my_app_to_remove/migrations/__init__.py

Laissez my_app_to_removedans le fichier "settings.py".

Étape 2: déployer les modifications

Mettez à jour tous les projets. Dites aux coéquipiers de mettre à jour leur projet et d'exécuter les migrations.

Étape 3: supprimez "my_app_to_remove" de settings.py

Supprimez maintenant "my_app_to_remove" de settings.py et déployez à nouveau.

guettli
la source
2

J'aime vraiment les étapes de cet article - il inclut le support de migration .

Peut-être qu'il doit être adapté dans deux mises à jour de code - mais semble vraiment sécurisé lorsque vous devez travailler avec de nombreux déploiements (comme: phase de test, version BETA et production - dans mon cas)

dannydedog
la source