Django: как полностью удалить приложение Django?

109

Какова процедура полного удаления приложения Django с удалением базы данных?

нулевой стимул
источник
удалите это имя приложения из установленных приложений settings.py, а затем удалите любую ссылку на это приложение из основного файла urls.py. Тогда вы можете безопасно удалить это приложение
Aseem
Если вы в разработке с использованием SQLite , и вы не против перезагрузки базы данных, это хорошо , чтобы просто удалить папку приложения и db.sqlite3, и удалить его из INSTALLED_APPSв settings.py?
Кевин

Ответы:

150
  1. В Django <1.7 есть удобная команда управления, которая предоставит вам SQL, необходимый для удаления всех таблиц для приложения. Дополнительную информацию см. В документации sqlclear . По сути, при запуске ./manage.py sqlclear my_app_nameвы получаете операторы 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
Отличный ответ, только одно добавление, которое я бы сделал: pip uninstall package-name - ваш друг, гораздо приятнее, чем копаться в вашем PYTHONPATH.
DaveJ
25
В Django 1.7, если вы используете миграцию, шаг 1 будет ./manage.py migrate my_app_name zero. И он также автоматически выполнит SQL.
Натан До
12
sqlclearбыл удален в Django 1.9, поэтому этот ответ подходит только для предыдущих версий. См .: docs.djangoproject.com/en/1.10/releases/1.9/…
Ахорус,
7
Если удаляемое приложение имеет миграции, от которых зависят миграции других приложений, система миграции выйдет из строя, когда обнаружит, что эти зависимые миграции больше не существуют. Будьте осторожны при использовании приведенного выше ответа, если удаляемое приложение является зависимостью в истории миграции другого из ваших приложений.
Филип Килибарда 06
1
И для полноты include("appname.urls")urls.py
картины
16
  1. закомментировать settings.pyв INSTALLED_APPSненужной строке приложения
  2. удалить всю папку __pycache__и migrateв вашем проекте
  3. удалить ненужную модель в models.py
  4. удалить все ссылки импорта в views.py, admin.pyконец и т. д.
  5. удалите все ссылки в urls.pyненужных приложениях
  6. удалить в базе данных ненужные таблицы, связанные с приложением (делаю это с помощью программы "Valentina Studio")
  7. удалить папку приложения
  8. в командной строке сделайте это: python manage.py migrateиpython manage.py syncdb
Вадим
источник
3

Приложение django - это «набор» файлов * .py и каталога с именем django-app-name. Таким образом, вы можете просто удалить всю папку со всеми файлами * .py

Для «удаления» таблиц из БД следует использовать DELETE FROM <app-name_table-names>

Кроме того, вам необходимо удалить строки с именем приложения из файла setting.py в корневом каталоге.

V-Light
источник
Предполагая, что вы не используете базу данных с другим приложением, вы можете просто удалить базу данных с именем в settings.py.
joel3000
у каждого приложения есть собственная база данных - неплохо
V-Light
3
@ V-Light у каждого приложения своя таблица, и у каждого проекта своя база данных.
Алиреза Саванд 02
3

В моем контексте проекты существуют несколько раз: у меня есть система разработки, у некоторых товарищей по команде есть система разработки, есть промежуточная система для заказчика и производственная система. Это означает, что я не хочу выполнять команды sql вручную. Я хочу, чтобы это было автоматизировано.

Цель: удалить приложение и все таблицы базы данных.

Шаг 1. Очистите приложение, но оставьте его установленным

удалите все файлы из приложения, кроме папки "миграции"

Выполните эту команду: 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: удалите my_app_to_remove из settings.py

Теперь удалите my_app_to_remove из settings.py и разверните снова.

Геттли
источник
2

Мне очень нравятся шаги из этой статьи - она ​​включает поддержку миграции .

Возможно, его нужно адаптировать в двух обновлениях кода, но выглядит действительно безопасным, когда вам нужно работать со многими развертываниями (например: этап тестирования, версия BETA и производство - в моем случае)

Дэннидог
источник