Django:Djangoアプリを完全にアンインストールする方法は?


109

Djangoアプリを完全にアンインストールし、データベースを削除する手順は何ですか?


そのアプリ名をsettings.pyインストール済みアプリから削除し、そのアプリへのリンクをメインのurls.pyファイルから削除します。その後、そのアプリを安全に削除できます
Aseem

データベースをリセットするSQLiteの、あなたが気にしない使用して開発しているなら、それだけでアプリフォルダを削除しても大丈夫ですdb.sqlite3、そしてから削除INSTALLED_APPSsettings.py
ケビン

回答:


150
  1. Django <1.7には、アプリのすべてのテーブルを削除するために必要なSQLを提供する便利な管理コマンドがあります。詳細については、sqlclear docsを参照してください。基本的に、実行./manage.py sqlclear my_app_nameすると、DB内のアプリのすべてのトレースを取り除くために実行する必要があるSQLステートメントが取得されます。これらのステートメントをSQLクライアントにコピーして貼り付ける(またはパイプする)必要があります。Django 1.7以降の場合は、データベースのクリーニングを自動的に実行する./manage.py migrate my_app_name zero移行ドキュメントを参照)を使用します。

  2. プロジェクトからアプリを削除するには、すべてを行う必要があるから、それを削除しているINSTALLED_APPSプロジェクト年代にsettings.py。Djangoはアプリをロードしなくなります。

  3. アプリのファイルをそのままにしておく必要がない場合は、プロジェクトディレクトリまたはアプリが存在するPYTHONPATH上の他の場所からアプリディレクトリを削除します。

  4. (オプション)アプリがメディアファイル、キャッシュファイル、またはその他の一時ファイルをどこかに保存している場合は、それらも削除することができます。また、アプリから残っている可能性のあるセッションデータが残っていることに注意してください。

  5. (オプション)古いコンテンツタイプも削除します。

そのようです。

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
すばらしい答えです。私が追加するのは1つだけです。pipuninstall package-nameはあなたの友達です。PYTHONPATHをトロールするよりもずっといいです。
DaveJ

25
Django 1.7では、移行を使用する場合、ステップ1はになります./manage.py migrate my_app_name zero。また、SQLも自動的に実行されます。
Nathan Do

12
sqlclearDjango 1.9で削除されたため、この回答は以前のバージョンでのみ有効です。参照:docs.djangoproject.com/en/1.10/releases/1.9/...
Akhorus

7
削除されるアプリに他のアプリの移行に依存する移行がある場合、依存する移行が存在しないことが検出されると、移行システムは機能しなくなります。削除するアプリが別のアプリの移行履歴に依存している場合は、上記の回答を使用するときに注意してください。
Filip Kilibarda 2017年

1
また、完全をinclude("appname.urls")urls.py
期す

16
  1. 不要なアプリの行settings.pyでコメント化INSTALLED_APPS
  2. すべてのフォルダー__pycache__を削除migrateし、プロジェクトで
  3. 不要なモデルを削除 models.py
  4. 、終了などですべてのインポートリンクを削除します。 views.pyadmin.py
  5. urls.py不要なアプリのすべてのリンクを削除します
  6. データベースで、アプリに関連付けられている不要なテーブルを削除します(ヘルププログラム「Valentina Studio」を使用して行います)
  7. アプリのフォルダーを削除する
  8. コマンドラインでそれを行う:python manage.py migrateそしてpython manage.py syncdb

3

djangoアプリは* .pyファイルの「セット」であり、django-app-nameを持つディレクトリです。したがって、すべての* .pyファイルを含むフォルダ全体を削除するだけです。

DBからテーブルを「削除」するには、使用する必要があります DELETE FROM <app-name_table-names>

さらに、ルートディレクトリのsetting.pyからapp-nameを含む行を削除する必要があります


データベースを別のアプリと共有していないと仮定すると、settings.pyで指定されたデータベースを削除できます。
joel3000 2010

各アプリには独自のデータベースがあります-悪くありません
V-Light

3
@ V-Light各アプリには独自のテーブルがあり、各プロジェクトには独自のデータベースがあります。
Alireza Savand 16

2

私はこの記事の手順が大好きです- 移行サポートが含まれています

たぶんそれはコードの2つのアップデートで適応する必要があるかもしれません-しかし、あなたが多くのデプロイメント(私の場合、テストステージ、ベータバージョン、本番など)で作業しなければならないとき、本当に安全に見えます。


2

私のコンテキストでは、プロジェクトは複数回存在します。私には開発システムがあり、一部のチームメイトには開発システムがあります。顧客用のステージングシステムと本番システムがあります。これは、SQLコマンドを手動で実行したくないことを意味します。自動化してほしい。

目標:アプリとすべてのデータベーステーブルを削除します。

手順1:アプリを空にするが、インストールしたままにする

フォルダ「migrations」を除くすべてのファイルをアプリから削除します

次のコマンドを実行します。 manage.py makemigrations -n drop_all_tables my_app_to_remove

ディレクトリは次のようになります。

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

my_app_to_remove「settings.py」ファイルに残します。

ステップ2:変更をデプロイする

すべてのプロジェクトを更新します。チームの仲間にプロジェクトを更新し、移行を実行するように伝えます。

ステップ3:settings.pyから「my_app_to_remove」を削除する

ここで、settings.pyから「my_app_to_remove」を削除して、再度デプロイします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.