Django SimpleJWT令牌黑名单迁移问题:表不存在错误求助
解决Django SimpleJWT令牌黑名单表不存在的问题
问题根源
误执行python manage.py migrate --fake后,Django的django_migrations迁移记录表已标记token_blacklist的迁移完成,但实际数据库中并未创建对应的token_blacklist_outstandingtoken和token_blacklist_blacklistedtoken表。后续回滚迁移时,因目标表不存在导致反向迁移失败;而常规的migrate/makemigrations命令会认为迁移已完成,不会触发表创建操作。
解决方案
步骤1:清理错误的迁移记录
手动删除django_migrations表中属于token_blacklist的所有条目,让Django重新识别该应用的迁移状态:
方式A:直接执行SQL(MySQL)
- 连接项目数据库:
mysql -u 用户名 -p 数据库名 - 删除对应迁移记录:
DELETE FROM django_migrations WHERE app = 'token_blacklist'; - 退出数据库:
exit;
方式B:通过Django Shell操作
- 进入Django Shell:
python manage.py shell - 执行清理代码:
from django.db.migrations.recorder import MigrationRecorder MigrationRecorder.Migration.objects.filter(app='token_blacklist').delete() exit()
步骤2:重新应用token_blacklist迁移
确认rest_framework_simplejwt.token_blacklist已添加到settings.py的INSTALLED_APPS中,执行命令重新创建表:
python manage.py migrate token_blacklist
验证
执行完迁移后,尝试生成令牌或使用黑名单功能,确认不再出现表不存在的报错。
内容的提问来源于stack exchange,提问作者fiocotti
相关产品推荐
相关产品推荐

