Django: Wie deinstalliere ich eine Django App vollständig?

109

Wie wird eine Django-App vollständig deinstalliert und die Datenbank entfernt?

zer0stimulus
quelle
Entfernen Sie diesen App-Namen aus settings.py installierten Apps und entfernen Sie dann alle Links zu dieser App aus der Hauptdatei urls.py. Dann können Sie diese App sicher löschen
Aseem
Wenn Sie mit SQLite in der Entwicklung sind und es Ihnen nichts ausmacht, die Datenbank zurückzusetzen, ist es in Ordnung, einfach den App-Ordner db.sqlite3und zu entfernen und ihn von INSTALLED_APPSin zu entfernen settings.py?
Kevin

Antworten:

150
  1. Django <1.7 verfügt über einen praktischen Verwaltungsbefehl, mit dem Sie die erforderliche SQL-Datei zum Löschen aller Tabellen für eine App erhalten. Weitere Informationen finden Sie in den sqlclear-Dokumenten . Grundsätzlich erhalten ./manage.py sqlclear my_app_nameSie beim Ausführen die SQL-Anweisungen, die ausgeführt werden sollen, um alle Spuren der App in Ihrer Datenbank zu entfernen. Sie müssen diese Anweisungen noch kopieren und in Ihren SQL-Client einfügen (oder weiterleiten). Verwenden Sie für Django 1.7 und höher ./manage.py migrate my_app_name zero(siehe Migrationsdokumente ), um die Datenbankbereinigung automatisch auszuführen.

  2. Um die App aus Ihrem Projekt zu entfernen, müssen Sie sie nur aus INSTALLED_APPSIhrem Projekt entfernen settings.py. Django lädt die App nicht mehr.

  3. Wenn Sie nicht mehr möchten, dass die Dateien der App hängen bleiben, löschen Sie das App-Verzeichnis aus Ihrem Projektverzeichnis oder einem anderen Speicherort auf Ihrem PYTHONPATH, an dem es sich befindet.

  4. (optional) Wenn die App Mediendateien, Cache-Dateien oder andere temporäre Dateien irgendwo gespeichert hat, möchten Sie diese möglicherweise auch löschen. Seien Sie auch vorsichtig bei verweilenden Sitzungsdaten, die möglicherweise von der App übrig bleiben.

  5. (optional) Ich würde auch veraltete Inhaltstypen entfernen.

Wie so.

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
quelle
5
Ausgezeichnete Antwort, nur eine Ergänzung, die ich machen würde: pip uninstall package-name is your friend, viel schöner als das Herumtollen in Ihrem PYTHONPATH.
DaveJ
25
Wenn Sie unter Django 1.7 die Migration verwenden, wird Schritt 1 ausgeführt ./manage.py migrate my_app_name zero. Und es wird automatisch auch die SQL ausführen.
Nathan Do
12
sqlclearwurde in Django 1.9 entfernt, daher ist diese Antwort nur für frühere Versionen gültig. Siehe: docs.djangoproject.com/de/1.10/releases/1.9/…
Akhorus
7
Wenn die zu löschende App Migrationen enthält, von denen die Migrationen anderer Apps abhängen, bricht das Migrationssystem zusammen, wenn festgestellt wird, dass diese abhängigen Migrationen nicht mehr vorhanden sind. Seien Sie vorsichtig, wenn Sie die obige Antwort verwenden, wenn die zu löschende App eine Abhängigkeit im Migrationsverlauf einer anderen Ihrer Apps ist.
Filip Kilibarda
1
Und der Vollständigkeit include("appname.urls")urls.py
halber
16
  1. Kommentar settings.pyin INSTALLED_APPSder Zeile der unnötigen App
  2. Löschen Sie alle Ordner __pycache__und migratein Ihrem Projekt
  3. unnötiges Modell löschen in models.py
  4. Löschen des gesamten Import Link in views.py, admin.pyEnde usw.
  5. Löschen Sie alle Links in urls.pyIhren unnötigen Apps
  6. In der Datenbank löschen Sie unnötige Tabellen, die mit der App verknüpft sind (ich mache es mit dem Hilfsprogramm "Valentina Studio")
  7. App-Ordner löschen
  8. in der Kommandozeile machen Sie es: python manage.py migrateundpython manage.py syncdb
Vadim
quelle
3

Die Django-App ist eine "Menge" von * .py-Dateien und ein Verzeichnis mit einem Django-App-Namen. Sie können also einfach den gesamten Ordner mit allen * .py-Dateien löschen

Um Tabellen aus der Datenbank zu "entfernen", sollten Sie verwenden DELETE FROM <app-name_table-names>

Außerdem müssen Sie Zeilen mit dem App-Namen aus settings.py in einem Stammverzeichnis löschen

V-Light
quelle
Angenommen, Sie teilen die Datenbank nicht mit einer anderen App, können Sie einfach die in settings.py genannte Datenbank löschen.
joel3000
Jede App hat eine eigene Datenbank - nicht schlecht
V-Light
3
@ V-Light Jede App hat eine eigene Tabelle und jedes Projekt hat eine eigene Datenbank.
Alireza Savand
2

Ich mag die Schritte aus diesem Artikel sehr - er beinhaltet Migrationsunterstützung .

Möglicherweise muss es in zwei Code-Updates angepasst werden - sieht aber sehr sicher aus, wenn Sie mit vielen Bereitstellungen arbeiten müssen (z. B. Testphase, BETA-Version und Produktion - in meinem Fall).

dannydedog
quelle
2

In meinem Kontext gibt es die Projekte mehrmals: Ich habe ein Entwicklungssystem, einige Teamkollegen haben ein Entwicklungssystem, es gibt ein Staging-System für den Kunden und ein Produktionssystem. Dies bedeutet, dass ich SQL-Befehle nicht manuell ausführen möchte. Ich möchte, dass es automatisiert wird.

Ziel: Entfernen Sie die App und alle Datenbanktabellen.

Schritt 1: Leeren Sie die App, lassen Sie sie jedoch installiert

Entfernen Sie alle Dateien aus der App mit Ausnahme des Ordners "Migrationen".

Führen Sie diesen Befehl aus: manage.py makemigrations -n drop_all_tables my_app_to_remove

Das Verzeichnis sieht jetzt so aus:

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

Belassen Sie my_app_to_removein der Datei "settings.py".

Schritt 2: Stellen Sie die Änderungen bereit

Aktualisieren Sie alle Projekte. Bitten Sie die Teamkollegen, ihr Projekt zu aktualisieren und die Migrationen auszuführen.

Schritt 3: Entfernen Sie "my_app_to_remove" aus settings.py

Entfernen Sie nun "my_app_to_remove" aus settings.py und stellen Sie es erneut bereit.

guettli
quelle