Answers:
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),它将自动运行数据库清理。
要从您的项目中删除该应用,您要做的就是从INSTALLED_APPS
项目的中删除该应用settings.py
。Django将不再加载该应用程序。
如果您不再希望应用程序的文件挂起,请从项目目录或PYTHONPATH所在的其他位置删除应用程序目录。
(可选)如果应用将媒体文件,缓存文件或其他临时文件存储在某处,则您可能还希望将其删除。此外,请警惕可能残留在应用程序中的会话数据。
(可选)我还将删除所有过时的内容类型。
像这样
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
。并且它将自动执行SQL。
sqlclear
已在Django 1.9中删除,因此此答案仅对以前的版本有用。参见:docs.djangoproject.com/en/1.10/releases/1.9/…– Akhorus
include("appname.urls")
urls.py
django应用程序是* .py文件的“集合”,并且是带有django-app-name的目录。因此,您只需删除所有* .py文件的整个文件夹
要从数据库中“删除”表,您应该使用 DELETE FROM <app-name_table-names>
此外,您必须从根目录中的setting.py中删除带有app-name的行。
在我的上下文中,项目存在几次:我有一个开发系统,一些队友有一个开发系统,有一个供客户使用的登台系统和一个生产系统。这意味着我不想手动执行sql命令。我希望它是自动化的。
目标:删除应用程序和所有数据库表。
从应用程序中删除所有文件,但文件夹“ 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”。
更新所有项目。告诉队友更新他们的项目并运行迁移。
现在,从settings.py中删除“ my_app_to_remove”并再次部署。