zer0stimulus
¿Cuál es el procedimiento para desinstalar completamente una aplicación Django, completa con la eliminación de la base de datos?
gabriel hurley
-
Django documentos sqlclear para más información. Básicamente, correr
./manage.py sqlclear my_app_name
le permite obtener las declaraciones SQL que deben ejecutarse para deshacerse de todos los rastros de la aplicación en su base de datos. Todavía 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
(ver el emigrar docs), que ejecuta la limpieza de la base de datos automáticamente. -
Para eliminar la aplicación de su proyecto, todo lo que necesita hacer es eliminarla de
INSTALLED_APPS
en tu proyectosettings.py
. Django ya no cargará la aplicación. -
Si ya no desea que los archivos de la aplicación permanezcan, elimine el directorio de la aplicación de su directorio de proyectos u otra ubicación en su PYTHONPATH donde reside.
-
(opcional) Si la aplicación almacenó archivos multimedia, archivos de caché u otros archivos temporales en algún lugar, es posible que desee eliminarlos también. También tenga cuidado con los datos de sesión persistentes que podrían quedar de la aplicación.
-
(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()
-
Excelente respuesta, solo una adición que haría: pip uninstall package-name es tu amigo, mucho mejor que rastrear tu PYTHONPATH.
– DaveJ
26 de julio de 2010 a las 12:23
-
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
20 de diciembre de 2014 a las 8:03
-
sqlclear
se 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
24 de noviembre de 2016 a las 14:03
-
Si la aplicación que se elimina tiene migraciones, de las cuales 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 desea eliminar es una dependencia en el historial de migración de otra de sus aplicaciones.
–Filip Kilibarda
06/10/2017 a las 19:08
-
Y para completar, normalmente deberá eliminar una referencia a
include("appname.urls")
del proyectourls.py
– nigel222
18 de julio de 2019 a las 16:14
Guettli
En mi contexto los proyectos existen varias veces: tengo un sistema de desarrollo, algunos compañeros de equipo 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 sea automatizado.
Objetivo: eliminar la aplicación y todas las tablas de la base de datos.
Paso 1: vacía la aplicación, pero déjala instalada
elimine todos los archivos de la aplicación, excepto la carpeta “migraciones”
Ejecute este comando:
python manage.py makemigrations -n drop_all_tables my_app_to_remove
El directorio ahora se ve 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
Dejar my_app_to_remove
en el archivo “settings.py”.
Paso 2: implementar los cambios
Actualizar todos los proyectos. Dile 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 e implemente nuevamente.
-
De hecho, una buena respuesta sobre cómo implementar esto cuando tiene cosas automatizadas
– Rabarberski
21 de mayo de 2021 a las 13:24
-
También tenga en cuenta que deberá mantener las funciones/métodos de los que dependen sus migraciones, por ejemplo, si usa una función como campo predeterminado. Las migraciones funcionan con modelos historicosque no incluyen métodos de modelos personalizados, etc.
– djvg
4 ago. 2022 a las 15:30
-
Esto es realmente genial (+1), permite que las migraciones avancen.
– Tiago Martins Peres
12 de diciembre de 2022 a las 16:43
- comentar sobre
settings.py
enINSTALLED_APPS
línea de aplicación innecesaria - eliminar todas las carpetas
__pycache__
ymigrate
en tu proyecto - eliminar modelo innecesario en
models.py
- eliminar todos importar enlace en
views.py
,admin.py
fin etc - eliminar todos los enlaces en
urls.py
en tus aplicaciones innecesarias - en la base de datos elimine las tablas innecesarias asociadas con la aplicación (lo hago con el programa de ayuda “Valentina Studio”)
- eliminar la carpeta de la aplicación
- en la línea de comando hazlo:
python manage.py migrate
ypython manage.py syncdb
La aplicación django es un “conjunto” de archivos *.py y un directorio con un nombre de aplicación django. Así que simplemente puede eliminar toda la carpeta con todos los archivos *.py
Para “eliminar” tablas de la base de datos, debe usar 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
Shao
Como primer paso, evite cualquier uso de los modelos de aplicaciones e implemente. Esto es esencial para la implementación continua. Consulte las notas a continuación.
Entonces tienes dos opciones.
Opción 1
- (Manual) Ejecutar
python manage.py migrate <app_name> zero
. Esto revertirá todas las migraciones de la aplicación y limpiará eldjango_migrations
mesa - Eliminar aplicación (código,
INSTALLED_APPS
,urls.py
etc.) - Desplegar (
python manage.py migrate
)
opcion 2
- Eliminar todos los modelos en la aplicación
- Desplegar
- Eliminar la aplicación (código,
INSTALLED_APPS
,urls.py
etc.) - Desplegar
- (Manual) Limpiar
django_migrations
mesa
Esta respuesta está pensando en un contexto de implementación continua automatizada (por ejemplo, Heroku). Manual significa que normalmente no se puede hacer en la implementación automatizada. Implementar básicamente se refiere a python manage.py migrate
que normalmente se realiza en la implementación automatizada.
notas
- Asegúrese de eliminar el código que importa esta aplicación desde otras aplicaciones. También cualquier referencia en
settings.py
(pero manténgalo enINSTALLED_APPS
para que podamos ejecutar migraciones),urls.py
etc. migrate <app_name> zero
revertirá todas las migraciones dependiendo de esas migraciones. Así que tenga cuidado si sus otras migraciones de aplicaciones dependen de estas migraciones.- También tenga en cuenta la eliminación en cascada si no solo tiene migraciones de esquema sino también migraciones de datos.
- Los receptores de señales que reciben señales definidas en otras aplicaciones pueden ser un problema en la implementación continua.
Referencias
-
Gracias @shao. ¿Puede comentar cómo hacer la opción 2, paso 5: (Manual) Limpiar la tabla django_migrations?
– Brett Elliot
8 de junio de 2022 a las 0:07
-
Hola @BrettElliot, algo como
DELETE FROM django_migrations WHERE app = <your_app_name>;
– Shao
19 de julio de 2022 a las 0:20
Eliminar de forma segura una aplicación de Django por Jordan Haines
Para eliminar por completo una aplicación de Django (con modelos), siga los pasos a continuación. Supongamos que estamos eliminando una aplicación llamada note_app
:
- Busque en sus otras aplicaciones cualquier importación de note_app. La forma más fácil de hacer esto es una búsqueda en todo el proyecto de “desde note_app”. Es posible que desee excluir el directorio note_app de su búsqueda.
- Comente todos los modelos en
note_app.models
. Es posible que también deba eliminar entradas denote_app.admin
archivo si registró sus modelos note_app con el administrador de Django. - Busque y resuelva errores al intentar ejecutar su aplicación Django. PD Es posible que te hayas perdido algunas importaciones de modelos en el paso 1.
- Tenga en cuenta que dependiendo de cómo defina ForeignKey, uno a uno y Muchos a muchos campos, es posible que haya perdido algunas claves para sus modelos de note_app en el paso 1. Es importante que los campos que apunten a modelos de note_app de modelos en otras aplicaciones se eliminen antes de continuar. Tómese un minuto para asegurarse de que no se haya perdido ninguno de estos campos; si lo fueran, elimine los campos que quedan y cree migraciones que eliminarán los campos de su base de datos.
- Correr
makemigrations
. Esto debería crear una migración de note_app que elimine todos los modelos que acaba de recomendar. Esta migración también debería eliminar los campos que hacen referencia a los modelos note_app de modelos en otras aplicaciones. - Ejecute sus migraciones. Debe ejecutar sus migraciones en todos los entornos (incluida la producción) ANTES de eliminar el directorio de la aplicación. Las migraciones que eliminan los modelos de su aplicación de la base de datos estarán, sorpresa, en su directorio note_app. Si elimina el directorio de la aplicación antes de tiempo, eliminará estas migraciones antes de que tengan la oportunidad de limpiar su base de datos.
- Es posible que reciba un aviso de que los tipos de contenido de sus modelos eliminados están obsoletos. Cuando se le pregunte si desea o no eliminar estos tipos de contenido, responda “sí”.
Git
Sugerencia: confirme sus migraciones, tome nota de la confirmación y luego cree una confirmación separada que elimine el directorio note_app. Cuando esté listo para aplicar sus cambios en un entorno de ensayo o producción, verifique la confirmación que anotó, ejecute la migración y luego verifique la confirmación más reciente para eliminar el directorio de la aplicación. Su primera confirmación aún debe tener note_app en INSTALLED_APPS.- Elimine el directorio que contiene el archivo note_app.
- Eliminar
note_app
de tuINSTALLED_APPS
configuración.
Y eso es todo… súper fácil 🙂
-
Gracias @shao. ¿Puede comentar cómo hacer la opción 2, paso 5: (Manual) Limpiar la tabla django_migrations?
– Brett Elliot
8 de junio de 2022 a las 0:07
-
Hola @BrettElliot, algo como
DELETE FROM django_migrations WHERE app = <your_app_name>;
– Shao
19 de julio de 2022 a las 0:20
Estos 3 pasos a continuación pueden eliminar por completo una aplicación de un proyecto de Django:
- Migrar una aplicación con cero especificándolo como se muestra a continuación. *Este comando a continuación elimina todas las tablas de una aplicación de la base de datos:
python manage.py migrate <app_name> zero
: Trae el… nombre de la aplicación. Use el nombre cero para migrar completamente hacia atrás, es decir, para revertir todas las migraciones aplicadas para una aplicación.
*Tenga cuidado, no puede migrar varias aplicaciones con zero
al especificarlos como se muestra a continuación, entonces hay un error:
python manage.py migrate <app_name> <app_name> zero
- Eliminar la aplicación de
INSTALLED_APPS
ensettings.py
Como se muestra abajo:
# "settings.py"
INSTALLED_APPS = [
# "my_app",
]
- Elimine la carpeta de la aplicación de un proyecto de Django.
elimine el nombre de esa aplicación de las aplicaciones instaladas settings.py, luego elimine cualquier enlace a esa aplicación del archivo principal urls.py. Entonces puedes eliminar esa aplicación de forma segura.
– Asem
10 jun 2019 a las 20:48
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 y
db.sqlite3
y quítelo deINSTALLED_APPS
ensettings.py
?–Kevin
3 de agosto de 2020 a las 19:39