Django:从数据库中安全地删除未使用的表
Posted
技术标签:
【中文标题】Django:从数据库中安全地删除未使用的表【英文标题】:Django: safely deleting an unused table from database 【发布时间】:2020-09-01 04:41:45 【问题描述】:在我的 django 应用程序中,我曾经利用基础 django rest 框架身份验证令牌来验证用户身份。现在我已经切换到 Json Web Token,但是浏览我的 psql 数据库时,我注意到了用于存储的表 authtoken_token DRF 身份验证令牌仍然存在。我想知道如何摆脱它。我考虑了 2 个选项:
-
通过迁移删除它:我认为这是正确且更安全的方法,但在我的项目文件夹内的 migrations 目录中,我没有找到与令牌相关的任何内容。仅与我的模型相关的内容;
直接从数据库中删除它可能是另一种选择,但我害怕弄乱 django 迁移(尽管它不应再与其他表有链接)
我必须澄清一下,我已经从我的 INSTALLED_APPS
中删除了 rest_framework.authtoken【问题讨论】:
【参考方案1】:要删除 authtoken 表,您可以通过以下方式使用 django 的迁移命令:
python manage.py migrate authtoken zero
这将恢复来自 authtoken 应用程序的所有迁移,有效地从数据库中删除表(只要这不会破坏任何约束)。
zero 迁移可用于任何已安装的 django 应用 (see relevant django documentation)。
运行零迁移后,您可以将应用从INSTALLED_APPS
中删除
【讨论】:
我可以在运行你的命令后删除 authtoken 文件吗?正如上一个答案的 #2 和 #3 点所建议的那样? @dc_Bita98 是的,该命令将删除与 authtoken 应用关联的数据库表。然后,您可以从代码中删除所有引用(INSTALLED_APPS 等)。我将更新答案以澄清:) 我认为这应该是正确的处理方式,但我之前已经从我的 INSTALLED_APPS 中删除了 rest_framework.authtoken,所以当我运行时该命令,我收到以下错误CommandError: No installed app with label 'authtoken'
迁移只能针对已安装的应用程序运行。运行命令后,可以将应用从 INSTALLED_APPS 设置中删除。【参考方案2】:
您可以选择第一个选项。您应该执行 3 个步骤来完成从 Django 应用程序中卸载 authtoken
-
从
INSTALLED_APPS
中删除 rest_framework.authtoken
,此操作将告诉您的 Django 应用不要从该模块获取任何迁移文件
删除authtoken_token
表,如果你愿意的话
在表django_migrations
中找到应用名authtoken
的记录,可以删除。
注意:您的代码中出现了几个错误,因为authtoken
模块已从您的INSTALLED_APPS
中删除。我的建议,在执行上述步骤之前先备份您现有的数据库
【讨论】:
我建议阅读此问题的任何人也遵循此答案,因为它提供了完全删除应用程序的其他必要步骤。谢谢以上是关于Django:从数据库中安全地删除未使用的表的主要内容,如果未能解决你的问题,请参考以下文章