博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django-关于manage.py migrate无效的问题
阅读量:6294 次
发布时间:2019-06-22

本文共 1754 字,大约阅读时间需要 5 分钟。

hot3.png

问题描述:

已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤 manage.py makemigrations确认成功,执行 manage.py migrate,提示No migrations to apply. 表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼

排查过程

  1. python manage.py dbshell 进到数据库里面,查看是否表已存在
    结果:表不存在
  2. 检查migrations文件
    结果:文件没问题
  3. 百度 google 各种搜,乱投医,各种尝试

解决方案

  1. python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
  2. python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
  3. python manage.py migrate 好啦,大功告成

原因分析

  1. 查看django_migrations表结构
    建表语句:
    CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL);
  2. 原因
    造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.

避免方案

  1. 有强迫症删除migrations文件的同学(比如我),请同时到数据库中删除相应记录
  2. 没有强迫症的同学,可以继续生成新的migrations,旧的就不必理会了

题外话

执行python manage.py migrate之后,可以使用python manage.py sqlmigrate appname migrations_num(例如python manage.py sqlmigrate user 0002)查看当前migrations文件对应的sql语句。

另外,在使用上述命令查看0002文件的sql语句时发现,django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。

 

***************************华丽分割线***********************

场景2:

在修改了models.py后,有些用户会喜欢用 manage.py makemigrations生成对应的py代码。

但有时执行 manage.py makemigrations命令,会提示"No changes detected." 可能有用的解决方式如下:

 

1. 直接使用python manage.py migrate.

可能会先生成对应的py代码,再自动执行这段代码,创建数据库表格 (我没有仔细去读文档 不清楚这条命令的逻辑)

 

2. 来自:https://docs.djangoproject.com/en/1.8/topics/migrations/

先 python manage.py makemigrations --empty yourappname 生成一个空的initial.py

再 python manage.py makemigrations 生成原先的model对应的migration file

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3222944/blog/1506046

你可能感兴趣的文章
我的友情链接
查看>>
supervisor守护进程的安装配置使用
查看>>
play2.0文档-面向java开发者(7)异步HTTP编程
查看>>
我的友情链接
查看>>
Linux常用命令笔记2---文件管理4
查看>>
Qt安装—图文并茂搭建VS2008+QT开发环境
查看>>
大量linux内存被cached
查看>>
都说Djnago框架重,那就让哥用15行代码写个django web程序!
查看>>
Learning ImageMagick 4: 批处理
查看>>
Python 条件判断
查看>>
中国大陆开源镜像站汇总
查看>>
Different Layouts for Different Widths
查看>>
关于cisco与中兴三层设备ospf互连
查看>>
vs2015_ef 连接mysql
查看>>
HTML5 手写板签名
查看>>
2. 异常的分类
查看>>
ARM平台硬件时钟中断周期HZ值计算
查看>>
win server2008搭建ftp服务器
查看>>
GIT 常用配置
查看>>
JS监听回车键
查看>>