Django:从数据库中安全删除未使用的 table

Django: safely deleting an unused table from database

在我的 django 应用程序中,我曾经利用基础 django rest 框架身份验证令牌 对用户进行身份验证。现在我已经切换到 Json Web Token,但是浏览我的 psql 数据库时,我注意到 table authtoken_token,用于存储 DRF 身份验证令牌,仍然存在。我想知道如何摆脱它。我考虑过 2 个选项:

  1. 通过迁移删除它:我认为这是继续进行的正确且安全的方法,但是在我的项目文件夹内的 migrations 目录中,我没有找到任何与令牌。仅与我的模型相关的内容;
  2. 直接从数据库中删除它可能是另一种选择,但我害怕弄乱 django 迁移(尽管它不应该再与其他 table 链接)

我必须澄清一下,我已经从我的 INSTALLED_APPS

中删除了 rest_framework.authtoken

要删除 authtoken 表,您可以按以下方式使用 django 的迁移命令:

python manage.py migrate authtoken zero

这将从 authtoken 应用还原所有迁移,有效地从数据库中删除表(只要这不破坏任何约束)。

zero 迁移可用于任何已安装的 django 应用程序 (see relevant django documentation)。

在 运行 零迁移后,您可以从 INSTALLED_APPS

中删除该应用

您可以选择第一个选项。您应该执行 3 个步骤来完成卸载 authtoken 从您的 Django 应用程序

  1. INSTALLED_APPS 中删除 rest_framework.authtoken,此操作将告诉您的 Django 应用不要从该模块中获取任何迁移文件
  2. 删除 authtoken_token table,如果你愿意的话
  3. 在tabledjango_migrations中找到应用名称authtoken的记录,可以去掉。

注意:您的代码中出现了几个错误,因为 authtoken 模块已从您的 INSTALLED_APPS 中删除。我的建议是,在执行上述步骤之前先备份现有数据库