问题描述:

已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python 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的时候,不必担心原有数据会丢失。

最新文章

  1. BZOJ1853 [Scoi2010]幸运数字
  2. Linux之匹配符
  3. iOS - UIViewController
  4. 【转】怎样提高VR渲染速度
  5. use sql trigger call java function
  6. +=与join的性能测试
  7. Understanding JavaScript Function Invocation and "this"
  8. MSSQL 常用内置函数
  9. QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)
  10. Android 获取 AudioRecord 麦克风音量大小并做选择性发送
  11. CMake Tutorial
  12. phpcms中用到的几个重要的代码
  13. FPGA编程基础(一)--參数传递与寄存器使用
  14. Python之excel文件追加内容
  15. Linux系统调用之内存管理
  16. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
  17. poj 3415
  18. 对于java自定义的工具类的提炼 注意事项
  19. Jquery学习(表单-Button)-----jQuery1.4.2
  20. asp.net 判断用户是否使用微信浏览器

热门文章

  1. mysql 编程
  2. 使用laravel框架的eloquent\DB模型连接多个数据库
  3. 进入JVM的世界:《深入理解JVM虚拟机》-- 思维导图
  4. Linux异常处理体系结构
  5. Mysql登陆、退出、更改环境编码
  6. python中json.dump() 和 json.dumps() 有那些区别?
  7. HashMap源码分析jdk1.6
  8. npm link & run npm script
  9. iOS键盘高度的获取
  10. 【bzoj4800】[Ceoi2015]Ice Hockey World Championship 折半搜索