django迁移报错解决

1、了解Django迁移过程

第一步:生成迁移文件

  • 1生成迁移文件代码
  • 2迁移文件所在位置
  • 3迁移内容

迁移文件内容里面记录了本次迁移内容,和继承过来的前面几次的迁移
(继承一定要正确,比如你删了其中一个迁移文件,就可能导致继承不正确而无法执行迁移文件)
在这里插入图片描述

第二步:执行迁移文件

123是截图位置

  • 1执行迁移代码
  • 2迁移后记录迁移数据所在位置
  • 3迁移记录内容

在这里插入图片描述

了解 迁移文件和迁移记录条 的关系

仔细观察你会发现,迁移文件名和迁移记录条里的name是一一对应的
在这里插入图片描述

1.1、可能出现的问题及解决办法

1.1.1、第一种,新增加字段时

如果你在模型中新增加了一个字段,执行迁移时可能会出现类似这样的代码
在这里插入图片描述
这是让你选择,填1或则2就行

  • 选1:让你写一个该新字段的默认值(选1回车,接着再写一个值再回车就ok了,注意赋值类型要对应你设置的类型)
  • 选2:会直接退出,然后需要你自己再models.py对应新增加的字段后面加上一个 default=多少,然后再次生成迁移、执行迁移,就OK了
1.1.2、第二种,不知道为啥迁移就是出现错误了(这里只是提供了问题的解决思路)

首先查看报错原因,看不懂英文可以直接复制出来百度。

1.1.2.1、可能出现的问题
  • 迁移文件继承有问题
  • 报错pymysql.err.InternalError
  • 报错django.db.utils.InternalError
    在这里插入图片描述
    在这里插入图片描述
1.1.2.2、解决思路
①迁移文件和迁移记录不一致时
  • 1、核对迁移文件和迁移记录是否一致(像我下面的截图一样,序号应该是连贯的)
  • 2.1、(如果迁移文件比记录多)先删除记录里没有的迁移文件,再重新生成并迁移
  • 2.2、(如果记录比迁移文件多)跳过①,直接执行②在这里插入图片描述
②迁移文件和迁移记录一致后,重新执行还是报错
如果①之后还是报错,再用②
  • 1、models.py先还原成修改前的样子
  • 2、再删除记录里没有的迁移文件(如果没有跳过)
  • 3、生成一个新迁移文件,把新的迁移文件里的operations复制到上一个迁移文件里的operations后面
    在这里插入图片描述
    在这里插入图片描述
  • 4、复制后新的这个迁移文件就没用了,直接删除
  • 6、删除后,添加你想修改或添加的东西到models.py中
  • 5、重新生成重新执行新的迁移文件(大部分问题到②这儿应该已经解决了)
③迁移记录和数据库的内容不一致(这种情况多半是自己手动改了数据库里面的表结构,没有通过models.py)
  • 1、核对models.py里的代码和数据库
    主要看看字段有没有多的,字段名是不是不一样等

  • 2.1、如果数据库里面差东西,可以直接在数据库里面加上,保持和models.py一致

  • 2.2、如果models.py里面差东西,从②里面的3开始执行

1.2、其他解决方案

python manage.py --fake [版本名字]

https://blog.csdn.net/a599174211/article/details/82795206

1.3、上面的解决方案都用过了,还是有问题

这时候你可以选择暴力解决

1、把迁移文件和迁移记录都删了
在这里插入图片描述
2、把建的数据表都删了(如果数据库里有需要的内容可以拷贝成插入语句存到txt里,或者直接导出sql)(models.py里面的内容一般不用删)
3、重新生成迁移文件,重新执行迁移文件,再核对迁移文件和记录是否一致,如果没有问题,就可以向数据库插入数据了

生成迁移文件
python manage.py makemigrations

执行迁移文件,并记录
python manage.py migrate

2、版本问题

出现类似这样的报错

 raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决办法:
找到这个文件点进去
在这里插入图片描述
将文件中的如下代码注释:

if version < (1, 3, 3):
raise ImproperlyConfigured(“mysqlclient 1.3.3 or newer is required; you have %s” % Database.version)
重新在项目manage.py路径下执行命令即可。
在这里插入图片描述
然后重新执行迁移就ok了
在这里插入图片描述

3、No changes detected

在这里插入图片描述
出现这个问题,先执行python manage.py makemigrations --empty booktest
在这里插入图片描述
就会发现:是因为没有在setting里面注册app

解决办法:
在这里插入图片描述

4、TypeError: init() missing 1 required positional argument: ‘on_delete’

在这里插入图片描述
出现这个问题的原因是django2以后的版本,在模板中使用外键ForeignKey必须写一个on_delete参数的默认值。
如下例:
在这里插入图片描述
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 当在使用Django进行数据库迁移时,如果出现"no changes detected"的错误提示,通常表示在模型定义中没有做任何更改,因此不需要进行数据库迁移。 该错误提示是Django在运行`makemigrations`命令时输出的结果。这意味着Django无法检测到对数据库模型的任何更改,因此不会生成任何新的迁移文件。 在Django中,模型的更改通常包括添加新的字段、修改字段属性、删除字段、更改模型关联等。如果没有进行这些更改,Django就不会自动生成新的迁移文件。 虽然出现"no changes detected"的错误并不是真正的错误,但我们在进行数据库模型的更改时通常会希望生成新的迁移文件,以确保数据库的结构与代码的更新保持一致。为了解决这个问题,可以手动创建一个空的迁移文件,通过运行`python manage.py makemigrations --empty <app_name>`命令来生成一个空的迁移文件。 总之,当出现"no changes detected"错误时,这意味着Django无法检测到对数据库模型的任何更改,因此没有生成新的迁移文件。 ### 回答2: 在使用Django开发过程中,当我们使用`python manage.py makemigrations`命令时,如果没有检测到需要迁移的更改,就会出现"no changes detected"的报错。 出现这个报错通常有以下几种情况: 1. 数据库已经是最新版本:当我们的模型类(models.py)没有进行改动,或者改动后并没有执行`makemigrations`命令时,数据库已经是最新版本,所以不需要新的迁移操作,就会出现这个报错。 2. 数据库迁移文件已经被删除:当我们在执行迁移操作后,手动删除了迁移文件(migrations文件夹中的文件),那么Django将无法检测到需要进行的迁移操作,就会出现这个报错。 3. 迁移文件编写错误:当我们编写的迁移文件存在错误,如模型类名称拼写错误、字段类型错误等,Django将无法正确解析迁移文件,就会出现这个报错。 4. 使用了不正确的数据库配置:如果我们使用了不正确的数据库配置,导致Django无法正确连接数据库,也会出现这个报错解决这个问题的方法一般有以下几种: 1. 确认是否有新的模型类需要迁移:如果没有新的模型类需要迁移,那么这个报错是正常的,可以忽略。 2. 检查迁移文件是否存在:如果迁移文件被手动删除了,可以尝试使用`python manage.py makemigrations <app_name>`命令重新生成迁移文件。 3. 检查迁移文件是否有错误:仔细检查迁移文件的编写,确保没有拼写错误、字段类型错误等。 4. 检查数据库配置是否正确:检查settings.py中的DATABASES配置是否正确,确保能够正确连接数据库。 ### 回答3: 当我们在使用Django进行数据库迁移时,有时会遇到报错信息"no changes detected"。这个错误通常意味着Django检测到我们没有做任何数据库模型的更改,因此没有需要进行迁移的变化。 报错信息"no changes detected"表明当前的迁移文件已经包含了所有已经创建的数据库表和字段等信息,没有需要进一步迁移的变化。这通常发生在我们修改了数据库模型,但是忘记执行`makemigrations`命令生成新的迁移文件。 为了解决这个问题,我们可以执行以下几个步骤: 1. 确认是否真的有数据库模型的更改。确保我们已经在模型文件中做出了更改,并且需要将更改反映到数据库中。 2. 执行命令`python manage.py makemigrations`。这将检测我们的模型文件,并生成针对这些变化的迁移文件。 3. 执行命令`python manage.py migrate`。 这将应用生成的迁移文件,将变化应用到数据库中。 如果以上步骤仍然报错"no changes detected",则可能是由于其他原因导致。一种可能的情况是,在迁移文件中出现了冲突或损坏的情况。可以尝试删除已生成的迁移文件,并重新执行以上步骤。 总结一下,“no changes detected”错误通常发生在我们没有进行数据库模型的更改时,或者我们忘记执行`makemigrations`命令。我们可以通过执行`makemigrations`和`migrate`命令来解决这个问题,并确保数据库与模型同步更新。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值