Qual è la procedura per disinstallare completamente un'app Django, completa di rimozione del database?
db.sqlite3e rimuoverla da INSTALLED_APPSin settings.py?
Qual è la procedura per disinstallare completamente un'app Django, completa di rimozione del database?
db.sqlite3e rimuoverla da INSTALLED_APPSin settings.py?
Risposte:
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.
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.
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.
(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.
(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()
./manage.py migrate my_app_name zero. E eseguirà automaticamente anche l'SQL.
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/…
include("appname.urls")dal progettourls.py
settings.pynella INSTALLED_APPSriga dell'app non necessaria__pycache__e migratenel tuo progetto models.py views.py, admin.pyfine ecc. urls.py app non necessariepython manage.py migrateepython manage.py syncdbL'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
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)
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.
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".
Aggiorna tutti i progetti. Dite ai compagni di squadra di aggiornare il loro progetto e di eseguire le migrazioni.
Ora rimuovi "my_app_to_remove" da settings.py e distribuisci di nuovo.