django.db.utils.OperationalError: (1050, "Table 'xxx' already exists")

django.db.utils.OperationalError: (1050, “Table ‘xxx’ already exists”)

今天迁移数据过程中发生的报错,经各种百度后,更加清楚django migrate的过程,现对解决方法进行总结。

python manage.py makemigrations

一、生成迁移文件
二、根据上一次的迁移文件,进行对比,对比后生成 改动那部分 的迁移文件

python manage.py migrate

一、执行迁移

进入正题

为什么回发生这个报错。翻译过来就是说,数据库中已经存在这个数据表。
方法一
1.删除这个数据表
2.删除跟这个表相关的(懒的话可以全删),位于django该app中migrations文件夹中的迁移文件(别删init文件)
3.删除数据库中名为django_migrations表中,有关该模型所属的app数据(delete from django_migrations where app=‘myapp’)
4.然后你执行那两条命令,就成功了
方法二
如果不想删除你的表以及表数据的话。
1.删除跟这个表相关的(懒的话可以全删),位于django该app中migrations文件夹中的迁移文件(别删init文件)
2.删除数据库中名为django_migrations表中,有关该模型所属的app数据(delete from django_migrations where app=‘myapp’)
3.然后根据你表的DDL,编写model。两者数据结构保持一致
4.执行命令
python manage.py makemigrations
python manage.py migrate --fake

这篇文章最重点就是那个 --fake

你可以理解为,使django忽略表已存在,继续执行迁移文件,类似ignore。
话说回来,如果你model跟数据库表结构不一样,那么它会忽略这一次区别。
例子:数据库该表有字段a,b ;生成的迁移文件里表结构有字段a,b,c。那么运行该指令后,数据结构不会有所更新
当你第二次迁移文件添加d字段,数据库结构也只会添加d字段;

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值