Django: come disinstallare completamente un'app Django?


109

Qual è la procedura per disinstallare completamente un'app Django, completa di rimozione del database?


rimuovi il nome dell'app dalle app installate settings.py, quindi rimuovi qualsiasi collegamento a quell'app dal file urls.py principale. Quindi puoi eliminare in sicurezza
quell'app

Se stai sviluppando utilizzando SQLite e non ti dispiace reimpostare il database, va bene rimuovere semplicemente la cartella dell'app db.sqlite3e rimuoverla da INSTALLED_APPSin settings.py?
Kevin

Risposte:


150
  1. Django <1.7 ha un pratico comando di gestione che ti darà l'SQL necessario per eliminare tutte le tabelle per un'app. Vedere la documentazione di sqlclear per ulteriori informazioni. Fondamentalmente, l'esecuzione ./manage.py sqlclear my_app_nameti fa ottenere le istruzioni SQL che dovrebbero essere eseguite per eliminare tutte le tracce dell'app nel tuo DB. È ancora necessario copiare e incollare (o reindirizzare) tali istruzioni nel client SQL. Per Django 1.7 e versioni successive, usa ./manage.py migrate my_app_name zero(vedi i documenti di migrazione ), che esegue automaticamente la pulizia del database.

  2. Per rimuovere l'app dal tuo progetto, tutto ciò che devi fare è rimuoverla dal INSTALLED_APPStuo progetto settings.py. Django non caricherà più l'app.

  3. Se non desideri più che i file dell'app siano in giro, elimina la directory dell'app dalla directory del progetto o da un'altra posizione sul tuo PYTHONPATH in cui risiede.

  4. (Facoltativo) Se l'app ha archiviato file multimediali, file cache o altri file temporanei da qualche parte, potresti voler eliminare anche quelli. Fai anche attenzione ai dati della sessione persistenti che potrebbero essere rimasti dall'app.

  5. (facoltativo) Rimuoverei anche qualsiasi tipo di contenuto obsoleto.

Così.

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()

5
Ottima risposta, solo un'aggiunta che farei: pip disinstallare il nome del pacchetto è tuo amico, molto più carino che pescare a strascico intorno al tuo PYTHONPATH.
DaveJ

25
In Django 1.7, se utilizzi la migrazione, il passaggio 1 sarà ./manage.py migrate my_app_name zero. E eseguirà automaticamente anche l'SQL.
Nathan Do

12
sqlclearè stato rimosso in Django 1.9 quindi questa risposta è valida solo per le versioni precedenti. Vedi: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus

7
Se l'app che si sta eliminando ha delle migrazioni, da cui dipendono le migrazioni di altre app, il sistema di migrazione si interromperà quando rileva che quelle migrazioni dipendenti non esistono più. Fai attenzione quando usi la risposta sopra se l'app da eliminare è una dipendenza nella cronologia della migrazione di un'altra delle tue app.
Filip Kilibarda

1
E per completezza, in genere è necessario rimuovere un riferimento a include("appname.urls")dal progettourls.py
nigel222

16
  1. commentare settings.pynella INSTALLED_APPSriga dell'app non necessaria
  2. elimina tutte le cartelle __pycache__e migratenel tuo progetto
  3. eliminare il modello non necessario in models.py
  4. elimina tutte le importazioni link di in views.py, admin.pyfine ecc.
  5. elimina tutti i link in urls.py app non necessarie
  6. nel database cancella le tabelle non necessarie associate all'app (lo faccio con il programma di aiuto "Valentina Studio")
  7. elimina la cartella dell'app
  8. nella riga di comando fallo: python manage.py migrateepython manage.py syncdb

3

L'app django è un "insieme" di file * .py e una directory con un nome app django. Quindi puoi semplicemente eliminare l'intera cartella con tutti i file * .py

Per "rimuovere" le tabelle dal DB è necessario utilizzare DELETE FROM <app-name_table-names>

Inoltre, devi eliminare le righe con nome-app da setting.py in una directory principale


Supponendo che tu non stia condividendo il database con un'altra app, puoi semplicemente rilasciare il db denominato in settings.py.
joel3000

ogni app ha il proprio db - non male
V-Light

3
@ V-Light ogni app ha la propria tabella e ogni progetto ha il proprio database.
Alireza Savand

2

Adoro i passaggi di questo articolo : include il supporto per la migrazione .

Forse deve essere adattato in due aggiornamenti del codice, ma sembra davvero sicuro quando devi lavorare con molte distribuzioni (come: fase di test, versione BETA e produzione - nel mio caso)


2

Nel mio contesto i progetti esistono più volte: ho un sistema di sviluppo, alcuni compagni di squadra hanno un sistema di sviluppo, c'è un sistema di staging per il cliente e un sistema di produzione. Ciò significa che non voglio eseguire comandi sql a mano. Voglio che sia automatizzato.

Obiettivo: rimuovere l'app e tutte le tabelle del database.

Passaggio 1: svuota l'app, ma lasciala installata

rimuovi tutti i file dall'app, tranne la cartella "migrazioni"

Esegui questo comando: manage.py makemigrations -n drop_all_tables my_app_to_remove

La directory ora ha questo aspetto:

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

Lascia my_app_to_removenel file "settings.py".

Passaggio 2: distribuire le modifiche

Aggiorna tutti i progetti. Dite ai compagni di squadra di aggiornare il loro progetto e di eseguire le migrazioni.

Passaggio 3: rimuovere "my_app_to_remove" da settings.py

Ora rimuovi "my_app_to_remove" da settings.py e distribuisci di nuovo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.