我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django migrate报错怎么办

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django migrate报错怎么办

这篇文章主要介绍Django migrate报错怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

前言

在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构。

问题1:migrate怎么判断哪些迁移脚本需要执行?

它会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。

问题2:migrate做了什么事情

  1. 将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。

  2. 如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrations中。

实战案例

当我们了解清楚migrate的作用后,我们来看一个案例
首先我们创建一个项目orm_migrations_demo,接着创建2个app应用frontarticle,代码结构如下图

Django migrate报错怎么办

接着在front.models.pyarticle.models.py中创建模型

# front.models.pyclass Article(models.Model):    name = models.CharField(max_length=200)# article.models.pyclass FrontUser(models.Model):    name = models.CharField(max_length=200)

接着在settings.pyINSTALL_APPS中将app注册

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'front',    'article',]

接着我们打开命令行,输入makemigrations article,再输入makemigrations front,此时2个app目录中都会出现迁移文件0001_initial.py,此时数据库中是没有表的,因为还没有执行迁移命令
接着我们执行migrate article,再输入migrate front,migrate发现数据库中没有迁移脚本,那么就会执行刚才生成的2个迁移脚本,将迁移脚本翻译成SQL语句,然后创建了2张表,执行完成后,会将迁移脚本记录到django_migrations表中,数据库中表结构如下:

Django migrate报错怎么办

django_migrations表中内容如下:

Django migrate报错怎么办

接下来我们在article.models.py中添加一个content字段

class Article(models.Model):    name = models.CharField(max_length=200)    content = models.CharField(max_length=200, null=True)

然后执行命令makemigrations article,会在项目中生成迁移文件0002_article_content.py,接着执行migrate article,执行迁移脚本,此时数据库中表django_migrations有3个迁移脚本

Django migrate报错怎么办

现在我们来模仿错误信息内容,我们将数据库中django_migrations表中的0002_article_content这行记录删除,然后我们来看下0002_article_content的代码

class Migration(migrations.Migration):    dependencies = [        ('article', '0001_initial'),    ]    operations = [        migrations.AddField(            model_name='article',            name='content',            field=models.CharField(max_length=200, null=True),        ),    ]

这个迁移脚本的作用是为article模型添加content字段,但是我们现在看一下article中的字段:

Django migrate报错怎么办

从上图中我们可以清楚的看到article表中已经有了content字段,那么我们再执行migrate article命令时,就会报错,说content字段重复了,报错信息如下

django.db.utils.OperationalError: (1060, "Duplicate column name 'content'")

如果发生这种报错信息,解决办法是在migrate命名后添加参数--fake--fake可以将指定的迁移脚本名字添加到数据库中。但是并不会把迁移脚本转换为SQL语句去修改数据库中的表

所以,我们可以执行命名migrate article --fake,会在django_migrations表中插入迁移脚本记录0002_article_content,如下图

Django migrate报错怎么办

此时数据库中表结构和django中的表结构完全一致,接下来执行迁移命令,就不会报错了

第一种报错情况总结

原因:执行migrate命令会报错的原因是。数据库的django_migrations表中的迁移版本记录和代码中的迁移脚本不一致导致的。
解决办法:使用--fake参数:首先对比数据库中的迁移脚本和代码中的迁移脚本。然后找到哪个不同,之后再使用--fake,将代码中的迁移脚本添加到django_migrations中,但是并不会执行sql语句。这样就可以避免每次执行migrate的时候,都执行一些重复的迁移脚本。

第二种报错情况

如果我们不管怎么执行migrate命令都会报错,那么就执行第二种方案

将出问题的app下的所有模型,都和数据库中的表保持一致。将出问题的app下的所有迁移脚本文件都删掉。再在django_migrations表中将出问题的app相关的迁移记录都删掉。使用makemigrations,重新将模型生成一个迁移脚本。使用migrate --fake-initial参数,将刚刚生成的迁移脚本,标记为已经完成(因为这些模型相对应的表,其实都已经在数据库中存在了,不需要重复执行了。)可以做其他的映射了。

以上是“Django migrate报错怎么办”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django migrate报错怎么办

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django migrate报错怎么办

这篇文章主要介绍Django migrate报错怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚
2023-06-15

django执行migrate无法生成表怎么办

这篇文章主要讲解了“django执行migrate无法生成表怎么办”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“django执行migrate无法生成表怎么办”吧!django每修改一次模板
2023-06-02

Django报错django.utils.datastructures.MultiValueDictKeyError该怎么办

本篇文章为大家展示了Django报错django.utils.datastructures.MultiValueDictKeyError该怎么办,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Djan
2023-06-02

Django报错TemplateDoesNotExist该怎么办

这篇文章给大家介绍Django报错TemplateDoesNotExist该怎么办,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在部署Django环境之后,打开页面报错网络上很多文章,都是说报错的原因是TEMPLATE
2023-06-02

Django数据库迁移报错InconsistentMigrationHistory怎么办

小编给大家分享一下Django数据库迁移报错InconsistentMigrationHistory怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Django在执行python manage.py makemigra
2023-06-15

django报错AssertionError("this function should never be called")怎么办

例如,假设你有以下代码:def foo(): assert False, "this function should never be called"foo()运行此代码将引发以下 `AssertionError` 异常:Assert
django报错AssertionError(
2024-02-28

django报错AssertionError(\"this function should never be called\")怎么办

报错的原因这个错误通常表明你的 Django 代码调用了一个函数,而这个函数不应该被调用。这通常是因为函数内部存在编码错误或逻辑错误。例如,假设你有以下代码:def foo():assert False, "this functio
django报错AssertionError(\"this function should never be called\")怎么办
2024-02-29

react.component 报错怎么办

react.component报错的解决办法:1、打开相应的react文件,查找“class Counter extends Component {static propTypes = {...”语句,将等号改为冒号;2、修改“{"presets": ["react", "es2015", "stage-0"]}”即可。
2023-05-14

canvas.toDataURL()报错怎么办

小编给大家分享一下canvas.toDataURL()报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!报错详尽信息Uncaught DOMExceptio
2023-06-09

启动uwsgi报错提示找不到django的模块怎么办

小编给大家分享一下启动uwsgi报错提示找不到django的模块怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!启动uwsgi报错,提示找不到django的模
2023-06-02

pandas merge报错怎么办

小编给大家分享一下pandas merge报错怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!pandas 做merge的时候报这个错:df22 = pd.m
2023-06-14

webpack4 react报错怎么办

webpack4 react报错的解决办法:1、进入全局安装的webpack目录下;2、把安装的webpack版本删除;3、执行命令“npm un webpack npm un webpack-cli”;4、再执行“npm i webpack-dev-server@3.10.2”命令即可。
2023-05-14

node server.js 报错怎么办

node server.js报错是因为路径不对,其解决办法:1、进入cmd窗口;2、切换到项目路径下的“server.js”;3、重新执行“node server.js”命令即可解决报错问题。
2023-05-14

node  import报错怎么办

node import报错的解决办法:1、在项目根目录下执行“npm install --save babel-corenpm install --save babel-preset-env”;2、在项目根目录下创建一个名字为“.babelrc”的文件;3、用“npm start”和“babel-node app.js”运行项目即可。
2023-05-14

node gm 报错怎么办

node gm报错的解决办法:1、安装“ImageMagick 6.x”;2、在环境目录Path中增加ImageMagick安装目录,并修改代码为“require('gm').subClass({imageMagick: true});”即可。
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录