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 函数式编程

    这篇文章主要介绍了Python 函数式编程的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Python实现时钟显示效果思路详解

    Python实现时钟显示效果思路详解

    这篇文章主要介绍了Python实现时钟显示,需要的朋友可以参考下
    2018-04-04
  • Flask进阶之构建RESTful API和数据库交互操作

    Flask进阶之构建RESTful API和数据库交互操作

    这篇文章主要为大家介绍了Flask进阶之构建RESTful API和数据库交互操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Python实现简单扫雷游戏

    Python实现简单扫雷游戏

    这篇文章主要为大家详细介绍了Python实现简单扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Python实现的爬取网易动态评论操作示例

    Python实现的爬取网易动态评论操作示例

    这篇文章主要介绍了Python实现的爬取网易动态评论操作,结合实例形式分析了Python针对网易评论正则爬取及json格式数据转换、提取等相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 使用python-docx在word文档中查找书签,并在书签处写入数据方式

    使用python-docx在word文档中查找书签,并在书签处写入数据方式

    使用python-docx库,可在Word文档中查找书签并写入数据。首先打开文档,通过bookmarks属性获取书签对象,然后使用书签名定位书签位置,最后将数据写入书签处。这种方法适合自动化填充Word模板等场景
    2024-09-09
  • python如何在pygame中设置字体并显示中文详解

    python如何在pygame中设置字体并显示中文详解

    再简单的游戏界面中均涉及文字处理,下面这篇文章主要给大家介绍了关于python如何在pygame中设置字体并显示中文的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • python3利用Dlib19.7实现人脸68个特征点标定

    python3利用Dlib19.7实现人脸68个特征点标定

    这篇文章主要为大家详细介绍了python3利用Dlib19.7实现人脸68个特征点标定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python3+PyQt5+Qt Designer实现界面可视化

    python3+PyQt5+Qt Designer实现界面可视化

    本文主要介绍了python3+PyQt5+Qt Designer实现界面可视化,Qt Designer,用鼠标拖拖就能完成窗体设计,感兴趣的可以了解一下
    2021-06-06
  • python栈实现进制转换的示例详解

    python栈实现进制转换的示例详解

    栈(Stack)是计算机科学中常用的数据结构,具有众多实际应用,其中之一是使用栈来实现进制转换,将一个数字从一种进制表示转换为另一种进制表示,本文将深入研究栈的原理,以及如何使用Python实现十进制到二进制、八进制和十六进制的进制转换,需要的朋友可以参考下
    2023-11-11

最新评论