Django:如何完全卸载Django应用?


109

完全卸载Django应用程序并完成数据库删除的过程是什么?


从已安装的settings.py应用程序中删除该应用程序名称,然后从urls.py主文件中删除指向该应用程序的任何链接。然后,您可以安全删除该应用程序
Aseem '19

如果您正在使用SQLite进行开发,并且不介意重置数据库,那么只需删除app文件夹和db.sqlite3,然后将其从INSTALLED_APPSin中删除,就可以了settings.py吗?
凯文

Answers:


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(请参阅migration docs),它将自动运行数据库清理。

  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卸载程序包名称是您的朋友,比在PYTHONPATH上拖网要好得多。
DaveJ 2010年

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/…– Akhorus
2016年

7
如果要删除的应用程序具有迁移,而该迁移是其他应用程序的迁移所依赖的,则迁移系统会在发现那些相关迁移不再存在时崩溃。如果要删除的应用程序是您另一个应用程序的迁移历史记录中的依赖项,请在使用上述答案时小心。
菲利普·基利巴达

1
为了完整include("appname.urls")urls.py
起见

16
  1. settings.pyINSTALLED_APPS不必要的应用程序行中注释掉
  2. 删除所有文件夹__pycache__并删除migrate您的项目
  3. 在中删除不必要的模型 models.py
  4. 删除中的所有导入链接views.pyadmin.py结束等。
  5. 删除urls.py您不必要的应用程序上的所有链接
  6. 在数据库中删除与应用程序关联的不必要的表(我使用帮助程序“ Valentina Studio”来完成此操作)
  7. 删除应用程序的文件夹
  8. 在命令行做到这一点:python manage.py migratepython manage.py syncdb

3

django应用程序是* .py文件的“集合”,并且是带有django-app-name的目录。因此,您只需删除所有* .py文件的整个文件夹

要从数据库中“删除”表,您应该使用 DELETE FROM <app-name_table-names>

此外,您必须从根目录中的setting.py中删除带有app-name的行。


假设您不与其他应用程序共享数据库,则只需删除在settings.py中命名的数据库即可。
joel3000

每个应用都有自己的数据库-不错
V-Light 2010年

3
@ V-Light每个应用程序都有自己的表,每个项目都有自己的数据库。
Alireza Savand '16

2

我真的很喜欢本文中的步骤-它包括迁移支持。

也许需要在两次代码更新中进行调整-但在必须处理许多部署时(例如:测试阶段,BETA版本和生产版),看起来确实很安全。


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”并再次部署。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.