Django makemigrations migrate执行成功但不创建数据库表的解决

 更新时间:2023年09月15日 14:51:55   作者:Harrytsz  
这篇文章主要介绍了Django makemigrations migrate执行成功但不创建数据库表的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Django makemigrations migrate执行成功不创建数据库表

问题描述

删除 app/migrations/0001_initial.py 文件以后和 MySQL 数据库中对应的 app 表后,执行以下命令成功,但是 MySQL 并不会创建新的 app 表

python manage.py makemigrations
python manage.py migrate
# 提示:No changes detected

问题原因

在 MySQL 数据库中有一张 django_migrations 表, 这张表里面有创建表的记录,删除对应的数据表记录即可(注意:不用删除整张 django_migrations 表):

在 MySQL 中执行如下命令:

`delete from django_migrations where app='yourappname';`

然后回到 Django 中重新执行:

python manage.py makemigrations appname
python manage.py migrate appname

刷新 MySQL 库,即可看到新创建的数据表。

Django迁移的理解(migrate和makemigrations)

makemigrations的作用

当执行 python manage.py makemigrations 命令时,Django会检索项目中models.py文件里的模型类,根据这些模型类来生成一些迁移文件,这些文件会出现在每个应用(app)的migrations文件夹下,里面的文件名会类似于下方这样

- 0001_initial
- 0002_some_change
- 0003_another_change
- 0004_undo_something

每一次执行makemigrations,这些文件前面的编号会根据上一次的编号进行递增。

文件中记录了本次执行makemigrations时,应用(app)下的模型类相较于上一次执行命令(makemigrations)时的区别,如果是第一次执行,那么就会是进行初始化。

这些文件的作用是记录每一次模型类变化的内容,可以将这些迁移文件看作数据库版本控制的记录文件,每一次模型类的增加、修改、删除都记录在这些文件中,这样我们可以将数据库的变化恢复到某次迁移之前的样子。

如果想将开发出来的项目给别人使用时,在别人的电脑上可以根据迁移文件快速构建出和自己开发时同样的数据库表。

migrate的作用

执行 python manage.py migrate 前,一般都需要使用makemigrations生成迁移文件(需要了解模型类有什么变化),然后根据这些迁移文件中的记录的变化内容应用到数据库中,使数据库中的表能够与当前模型类对应。

migrate可以将新的变化应用到数据库中,也可以将上一次的迁移撤销或者还原到某次迁移之前的状态

这种撤销迁移的效果也可以自己手动来实现,例如直接对迁移文件、模型类、数据库表进行修改,但是django中一个django_migrations表,这个表记录了每个应用(app)每一次的迁移记录,如果手动删除时没有涉及到这个表的修改,那么便会出现一些错误。

撤销book应用的某次迁移

# migrate后面需要写应用名字,0002代表的是迁移文件前面的编号
python manage.py migrate books 0002

撤销某个应用的所有迁移

# 撤销所有迁移时,使用zero来代替迁移文件编号
python manage.py migrate books zero

撤销不是100%能够成功的,有一些已经应用的改变是不可撤销的,那么尝试撤销这种改变会引发

IrreversibleError异常,那么这种情况就需要自行解决了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python基础操作列表切片解析

    python基础操作列表切片解析

    列表和字符串一样,列表同样可以截取和被索引,列表被截取后返回一个包含所需元素的新列表,List中的元素是可以改变的,需要的朋友可以参考下
    2023-04-04
  • Django用户认证系统 Web请求中的认证解析

    Django用户认证系统 Web请求中的认证解析

    这篇文章主要介绍了Django用户认证系统 Web请求中的认证解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python3中条件控制、循环与函数的简易教程

    Python3中条件控制、循环与函数的简易教程

    这篇文章主要给大家介绍了关于Python3中条件控制、循环与函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Django unittest 设置跳过某些case的方法

    Django unittest 设置跳过某些case的方法

    今天小编就为大家分享一篇Django unittest 设置跳过某些case的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python子线程退出及线程退出控制的代码

    python子线程退出及线程退出控制的代码

    这篇文章主要介绍了python子线程退出及线程退出控制的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python实现模拟时钟代码推荐

    Python实现模拟时钟代码推荐

    本文给大家汇总介绍了下使用Python实现模拟时钟的代码,一共3个例子,后两个是基于QT实现,有需要的小伙伴可以参考下
    2015-11-11
  • 一行代码挖掘文化瑰宝,Python解锁古诗文世界

    一行代码挖掘文化瑰宝,Python解锁古诗文世界

    想要从文字海洋中捕获珍珠般的古诗文吗?通过Python爬取古诗文网,你将掌握直捣黄龙的技能,简单几步,让经典文学尽收囊中,为你的项目增添灵气,需要的朋友可以参考下
    2024-03-03
  • python获取中文字符串长度的方法

    python获取中文字符串长度的方法

    今天小编就为大家分享一篇python获取中文字符串长度的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python 调用Java实例详解

    Python 调用Java实例详解

    这篇文章主要介绍了Python 调用Java实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Python 解决相对路径问题:

    Python 解决相对路径问题:"No such file or directory"

    这篇文章主要介绍了Python 解决相对路径问题:"No such file or directory"具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论