欢迎来访我的博客。

Django手动删除数据库表后,无法再执行makemigrations和migrate操作的解决方法

Django 小张哥哥 525浏览 1评论

笔者在进行调试过程中,由于对数据库中一个表的改动过大。而且未通过Django删表,直接在数据库中进行了删表操作,导致后面再重构表格时候出错。

django.db.utils.ProgrammingError: (1146, "Table 'xxx' doesn't exist")

然后,我试图删除掉app/migrations/下的迁移文件,然后重新重构该表。结果仍旧是失败。

后来我就想通过在django再重新删除一下该表。于是,我就将models.py文件中的该表对应的模型的代码给注释条了。结果在尝试删除时候,也报出错误:

django.db.utils.InternalError:
 (1051, "Unknown table 'xxx.xxx')

因为该表确实找不到了,报出错误也是正常。

后面我就尝试通过在数据库中重新创建一个同名的表,表中的字段随意填了一下。然后继续执行上面的操作(注释相关模型代码),执行makemigrations命令和migrate命令:

(venv) C:\Users\zhang\MyProjects>python manage.py makemigrations
Migrations for 'aaa':
  apps\blog\migrations\0003_delete_comment.py
    - Delete model Comment

(venv) C:\Users\zhang\MyProjects>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions, user, xadmin
Running migrations:
  Applying blog.0003_delete_comment... OK

可以发现,django终于把我刚刚创建的那个表给删除了。

那后面就很好办了。

我把之前注释的模型的代码给解除注释,然后重新执行makemigrations和migration操作:

(venv) C:\Users\zhang\MyProjects>python manage.py makemigrations
Migrations for 'blog':
  apps\blog\migrations\0004_comment.py
    - Create model Comment

(venv) C:\Users\zhang\MyProjects>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions, user, xadmin
Running migrations:
  Applying blog.0004_comment... OK

数据库中查看一下 ,发现django重新创建了该表,并且表的各个字段也和模型代码中定义的相同。


于是,Problem solved.


But...

后续还是需要注意不要随意在数据库中对表做改动甚至删除。操作表还是最好通过django的orm去操作。

转载请注明:禅思 » Django手动删除数据库表后,无法再执行makemigrations和migrate操作的解决方法?

喜欢 (0) or 分享 (0)

我的个人微信公众号,欢迎关注

扫码或搜索:Python后端开发Django

Python后端开发Django

微信公众号 扫一扫关注

结交朋友、一起学习,一起进步。

科波之主

QQ号 386046154 立即加入

添加微信,进行技术交流

专注技术交流, 一同成长进步

我的微信号

如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
    1. what is tadalafil tadalafil daily use tadalafil
      Wesleyviord 2021-03-05 18:17:55 回复