如何完全卸载 Django 应用程序?
完全卸载 Django 应用程序并删除数据库的过程是什么?
What is the procedure for completely uninstalling a Django app, complete with database removal?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
姜戈
1.7 有一个方便的管理命令,它将为您提供删除应用程序的所有表所需的 SQL。请参阅 sqlclear 文档了解更多信息。基本上,运行
./manage.py sqlclear my_app_name
可以让您获得应该执行的 SQL 语句,以消除数据库中应用程序的所有痕迹。您仍然需要将这些语句复制并粘贴(或通过管道传输)到 SQL 客户端中。对于 Django 1.7 及更高版本,请使用./manage.py migrate my_app_name Zero
(请参阅 migrate docs),它会自动运行数据库清理。要从项目中删除该应用,您只需从项目的
settings.py
中的INSTALLED_APPS
中删除它即可。 Django 将不再加载该应用程序。如果您不再希望应用程序的文件徘徊,请从项目目录或 PYTHONPATH 上它所在的其他位置删除该应用程序目录。
如果
(可选)如果应用程序在某处存储了媒体文件、缓存文件或其他临时文件,您可能也想删除它们。还要警惕应用程序中可能残留的挥之不去的会话数据。
(可选)我还会删除任何过时的内容类型。
就像这样。
Django < 1.7 has a handy management command that will give you the necessary SQL to drop all the tables for an app. See the sqlclear docs for more information. Basically, running
./manage.py sqlclear my_app_name
gets you get the SQL statements that should be executed to get rid of all traces of the app in your DB. You still need to copy and paste (or pipe) those statements into your SQL client. For Django 1.7 and up, use./manage.py migrate my_app_name zero
(see the migrate docs), which runs the database cleaning automatically.To remove the app from your project, all you need to do is remove it from
INSTALLED_APPS
in your project'ssettings.py
. Django will no longer load the app.If you no longer want the app's files hanging around, delete the app directory from your project directory or other location on your PYTHONPATH where it resides.
(optional) If the app stored media files, cache files, or other temporary files somewhere, you may want to delete those as well. Also be wary of lingering session data that might be leftover from the app.
(optional) I would also remove any stale content types.
Like so.
在我的上下文中,项目存在多次:我有一个开发系统,一些团队成员有一个开发系统,有一个面向客户的登台系统和一个生产系统。这意味着我不想手动执行sql命令。我希望它能够自动化。
目标:删除应用程序和所有数据库表。
第 1 步:清空应用程序,但保持安装状态,
删除应用程序中的所有文件(文件夹“migrations”除外)
执行此命令:
目录现在如下所示:
将
my_app_to_remove
保留在文件“settings.txt”中。 py”。步骤 2:部署更改
更新所有项目。告诉团队成员更新他们的项目并运行迁移。
步骤 3:从 settings.py 中删除“my_app_to_remove”
现在从 settings.py 中删除“my_app_to_remove”并再次部署。
In my context the projects exists several times: I have a development system, some team mates have a development system, there is a staging system for the customer and a production system. This means I don't want to execute sql commands by hand. I want it to be automated.
Goal: Remove the app and all database tables.
Step 1: empty the app, but leave it installed
remove all files from the app, except the folder "migrations"
Execute this command:
The directory looks now like this:
Leave
my_app_to_remove
in the file "settings.py".Step 2: Deploy the changes
Update all projects. Tell the team mates to update their project and to run the migrations.
Step 3: remove "my_app_to_remove" from settings.py
Now remove "my_app_to_remove" from settings.py and deploy again.
INSTALLED_APPS
中不必要的应用程序行中的settings.py
__pycache__
和migrate
models.py
中的 modelviews.py
中的所有 import 链接,admin.py
end 等urls.py
中的链接python manage.py migrate
和python manage.pysyncdb
settings.py
inINSTALLED_APPS
unnecessary app's line__pycache__
andmigrate
at your projectmodels.py
views.py
,admin.py
end etc.urls.py
on your unnecessary app'spython manage.py migrate
andpython manage.py syncdb
第一步,阻止对应用程序模型的任何使用并进行部署。这对于滚动部署至关重要。检查下面的注释。
那么你有两个选择。
选项 1
python manage.py migrate;零。这将恢复应用程序的所有迁移并清理
django_migrations
表INSTALLED_APPS
、urls.py
等)python manage.py migrate
)选项 2
INSTALLED_APPS
,urls. py
等)django_migrations
表这个答案是在自动滚动部署上下文(例如 Heroku)中思考的。
手动意味着在自动化部署中通常无法完成。部署基本上指的是
python manage.py migrate
,它通常在自动化部署中完成。注释
settings.py
中的任何引用(但将其保留在INSTALLED_APPS
中,以便我们可以运行迁移)、urls.py
等。迁移零
将根据这些迁移恢复所有迁移。因此,如果您的其他应用程序迁移依赖于这些迁移,请务必小心。参考
As a first step, prevent any usage of the app models and deploy. This is essential for rolling deployment. Check notes below.
Then you have two options.
Option 1
python manage.py migrate <app_name> zero
. This will revert all the migrations for the app and clean thedjango_migrations
tableINSTALLED_APPS
,urls.py
, etc.)python manage.py migrate
)Option 2
INSTALLED_APPS
,urls.py
, etc.)django_migrations
tableThis answer is thinking in an automated rolling deployment context (e.g. Heroku).
Manual means it normally cannot be done in automated deployment. Deploy basically refers to
python manage.py migrate
which is normally done in automated deployment.Notes
settings.py
(but keep it inINSTALLED_APPS
so we can run migrations),urls.py
, etc.migrate <app_name> zero
will revert all migrations depending on those migrations. So be careful if your other apps migrations depend on these migrations.References
django app 是一组 *.py 文件和一个带有 django-app-name 的目录。因此,您可以简单地删除包含所有 *.py 文件的整个文件夹
要从数据库中“删除”表,您应该使用
DELETE FROM
此外,您必须删除带有 app 的行-name 来自根目录中的setting.py
django app is a "set" of *.py files and a directory with a django-app-name. So you can simply delete the whole folder with all *.py files
To "remove" tables from DB you should use
DELETE FROM <app-name_table-names>
Furthermore, you have to delete lines witgh app-name from setting.py in a root directory
安全删除 Django 应用(作者:Jordan Haines)
完全删除 Django 应用(对于模型),请按照以下步骤操作。假设我们要删除一个名为
note_app
的应用:note_app.models
中的所有模型。如果您使用 Django admin 注册了 note_app 模型,您可能还需要从note_app.admin
文件中删除条目。Git
提示:提交您的迁移,记下该提交,然后创建一个单独的提交来删除 note_app 目录。当您准备好在临时或生产环境中应用更改时,请签出您记下的提交,运行迁移,然后签出最新提交以删除应用程序目录。您的第一次提交应该在 INSTALLED_APPS 中仍然有 note_app。INSTALLED_APPS
设置中删除note_app
。就是这样……超级简单:)
Safely Remove a Django app by Jordan Haines
To completely remove a Django app (with models), follow the steps below. Let’s pretend we’re removing an app called
note_app
:note_app.models
. You may need to also remove entries fromnote_app.admin
file if you registered your note_app models with Django admin.makemigrations
. This should create a note_app migration that deletes all of the models you just commended out. This migration should also remove fields referring to note_app models from models in other apps.Git
Tip: Commit your migrations, take note of the commit, and then create a separate commit that deletes the note_app directory. When you are ready to apply your changes in a staging or production environment, checkout the commit you noted, run the migration, and then checkout the latest commit to delete the app directory. Your first commit should still have note_app in INSTALLED_APPS.note_app
from yourINSTALLED_APPS
setting.And that’s really about it…super easy :)
以下 3 个步骤可以从 Django 项目中完全删除应用程序:
*注意,您无法通过如下所示指定
zero
多个应用来迁移它们,那么会出现错误:INSTALLED_APPS
insettings.py
如下所示:These 3 steps below can completely remove an app from a Django project:
*Be careful, you cannot migrate multiple apps with
zero
by specifying them as shown below, then there is an error:INSTALLED_APPS
insettings.py
as shown below:之前的答案大多是以下内容的变体: https://patrick.cloke.us/posts/2020/01/23/cleanly-removing-a-django-app-with-models/
Django 现在记录了删除应用程序的“批准”方法:
https://docs.djangoproject.com/en/dev/howto/delete -app/
与下面的脚本相结合,该解决方案...
此过程分 2 个阶段完成。
第 1 阶段:删除应用程序模型、迁移和部署...
除了模型(空)、迁移和应用程序(部署所需)之外
第 2 阶段:在将来的某个日期从代码库中删除数据库和应用程序包中的所有跟踪...
第 2 步的完整管理命令:
该命令
的核心内容:
Prior answers are mostly variations on: https://patrick.cloke.us/posts/2020/01/23/cleanly-removing-a-django-app-with-models/
Django now documents a "sanctioned" method for deleting an app:
https://docs.djangoproject.com/en/dev/howto/delete-app/
Combined with script below, this solution...
This process is completed in 2 phases.
Phase 1: delete app models, migrate, and deploy...
except models (empty), migrations, and apps (needed for deployment)
Phase 2: remove all traces from DB and app package from code base at some future date...
A complete management command for Step 2:
https://gist.github.com/powderflask/f0ae8b9ae6c7bb471f591de5175204cd
The heart of that command: