Django: ¿Cómo desinstalar completamente una aplicación Django?

109

¿Cuál es el procedimiento para desinstalar completamente una aplicación de Django, completa con la eliminación de la base de datos?

estímulo cero
fuente
elimine el nombre de la aplicación de las aplicaciones instaladas en settings.py, luego elimine cualquier enlace a esa aplicación desde el archivo urls.py principal. Entonces puedes eliminar esa aplicación de forma segura
Aseem
Si está en desarrollo usando SQLite y no le importa restablecer la base de datos, ¿está bien simplemente eliminar la carpeta de la aplicación db.sqlite3y eliminarla desde INSTALLED_APPSadentro settings.py?
Kevin

Respuestas:

150
  1. Django <1.7 tiene un útil comando de administración que le proporcionará el SQL necesario para eliminar todas las tablas de una aplicación. Consulte los documentos de sqlclear para obtener más información. Básicamente, ejecutar ./manage.py sqlclear my_app_namele permite obtener las declaraciones SQL que deben ejecutarse para deshacerse de todos los rastros de la aplicación en su base de datos. Aún necesita copiar y pegar (o canalizar) esas declaraciones en su cliente SQL. Para Django 1.7 y versiones posteriores, use ./manage.py migrate my_app_name zero(consulte los documentos de migración ), que ejecuta la limpieza de la base de datos automáticamente.

  2. Para eliminar la aplicación de su proyecto, todo lo que necesita hacer es eliminarla de INSTALLED_APPSsu proyecto settings.py. Django ya no cargará la aplicación.

  3. Si ya no desea que los archivos de la aplicación permanezcan por ahí, elimine el directorio de la aplicación del directorio de su proyecto u otra ubicación en su PYTHONPATH donde reside.

  4. (opcional) Si la aplicación almacenó archivos multimedia, archivos de caché u otros archivos temporales en algún lugar, es posible que también desee eliminarlos. También tenga cuidado con los datos de sesión persistentes que podrían quedar en la aplicación.

  5. (opcional) También eliminaría cualquier tipo de contenido obsoleto.

Al igual que.

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
fuente
5
Excelente respuesta, solo una adición que haría: pip uninstall package-name es tu amigo, mucho mejor que rastrear tu PYTHONPATH.
DaveJ
25
En Django 1.7, si usa la migración, el paso 1 será ./manage.py migrate my_app_name zero. Y también ejecutará automáticamente el SQL.
Nathan Do
12
sqlclearse eliminó en Django 1.9, por lo que esta respuesta solo es válida para versiones anteriores. Ver: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus
7
Si la aplicación que se está eliminando tiene migraciones, de las que dependen las migraciones de otras aplicaciones, el sistema de migración fallará cuando vea que esas migraciones dependientes ya no existen. Tenga cuidado al usar la respuesta anterior si la aplicación que se eliminará es una dependencia en el historial de migración de otra de sus aplicaciones.
Filip Kilibarda
1
Y para completar, normalmente deberá eliminar una referencia a include("appname.urls")del proyectourls.py
nigel222
16
  1. comentar settings.pyen INSTALLED_APPSla línea de la aplicación innecesaria
  2. eliminar todas las carpetas __pycache__y migrateen su proyecto
  3. eliminar modelo innecesario en models.py
  4. eliminar todos los enlaces de importaciónviews.py , admin.pyfinalizar , etc.
  5. eliminar todos los enlaces de urls.pysu aplicación innecesaria
  6. en la base de datos elimine las tablas innecesarias asociadas a la aplicación (lo hago con el programa de ayuda "Valentina Studio")
  7. eliminar la carpeta de la aplicación
  8. en la línea de comando hazlo: python manage.py migrateypython manage.py syncdb
Vadim
fuente
3

La aplicación django es un "conjunto" de archivos * .py y un directorio con un nombre de aplicación django. Entonces, simplemente puede eliminar toda la carpeta con todos los archivos * .py

Para "eliminar" tablas de la base de datos debe utilizar DELETE FROM <app-name_table-names>

Además, debe eliminar las líneas con el nombre de la aplicación de setting.py en un directorio raíz

V-Light
fuente
Suponiendo que no está compartiendo la base de datos con otra aplicación, puede soltar la base de datos nombrada en settings.py.
joel3000
cada aplicación tiene su propia base de datos - no está mal
V-Light
3
@ V-Light cada aplicación tiene su propia tabla y cada proyecto tiene su propia base de datos.
Alireza Savand
2

Realmente me encantan los pasos de este artículo : incluye soporte de migración .

Tal vez deba adaptarse en dos actualizaciones de código, pero parece realmente seguro cuando tiene que trabajar con muchas implementaciones (como: etapa de prueba, versión BETA y producción, en mi caso)

dannydedog
fuente
2

En mi contexto, los proyectos existen varias veces: tengo un sistema de desarrollo, algunos compañeros tienen un sistema de desarrollo, hay un sistema de etapas para el cliente y un sistema de producción. Esto significa que no quiero ejecutar comandos sql a mano. Quiero que esté automatizado.

Objetivo: eliminar la aplicación y todas las tablas de la base de datos.

Paso 1: vacíe la aplicación, pero déjela instalada

eliminar todos los archivos de la aplicación, excepto la carpeta "migraciones"

Ejecute este comando: manage.py makemigrations -n drop_all_tables my_app_to_remove

El directorio se ve ahora así:

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

Deje my_app_to_removeen el archivo "settings.py".

Paso 2: implementar los cambios

Actualice todos los proyectos. Dígales a los compañeros de equipo que actualicen su proyecto y ejecuten las migraciones.

Paso 3: elimine "my_app_to_remove" de settings.py

Ahora elimine "my_app_to_remove" de settings.py y vuelva a implementar.

guettli
fuente