回滚django的migration:

https://stackoverflow.com/questions/32123477/django-revert-last-migration

  1. I've made a migration that added a new table and want to revert it and delete the migration, without creating a new migration.
  2.  
  3. How do I do it? Is there a command to revert last migration and then I can simply delete the migration file?
  4.  
  5. You can revert by migrating to the previous migration.
  6.  
  7. For example, if your last two migrations are:
  8.  
  9. 0010_previous_migration
  10. 0011_migration_to_revert
  11. Then you would do:
  12.  
  13. ./manage.py migrate my_app 0010_previous_migration
  14. You can then delete migration 0011_migration_to_revert.
  15.  
  16. If you're using Django 1.8+, you can show the names of all the migrations with
  17.  
  18. ./manage.py showmigrations my_app
  19. To reverse all migrations for an app, you can run:
  20.  
  21. ./manage.py migrate my_app zero

1、到数据库表django_migrations中查看app中看看app列

2、到项目对应的app模块中打开migrations文件查看生成的文件与数据库app列中的是不是一样

3.找到哪里不一致的文件,然后使用python manage.py --fake [版本名字],将这个版本标记为已经映射

如果还是报错就按照下面执行

  1. 、删除指定appmigrations和数据库表django_migrations中和这个app相关的版本号,
  2.  
  3. 、将模型中的字段和数据库中的字段保持一致,再使用命令python manage.py makemigrations重新生成一个初始化的迁移脚本。
  4.  
  5. 、再使用命令python manage.py makemigrations --fake-initial来将这个初始化的迁移脚本标记为已经映射。之后再修改就没有问题了。
  6.  
  7. 更多关于迁移脚本的。请查看官方文档:https://docs.djangoproject.com/en/2.0/topics/migrations/

makemigrations和migrate时django都做了什么?

  1. makemigrations
  2. 执行makemigrations时检测models文件变化,在migrations文件夹中生成变更的sqlpy文件
  3. migrate:检测django_migrations表,迁移过的表会记录在其中并不再执行migrate,未找到执行记录则进行migrate

不要随意删除django项目目录下的 migrations文件夹,里面会记录models文件每次makemigrations操作,误删后,makemigrations会重新生成

  1. #执行python manage.py makemigrations命令时报错问题及解决办法:
  2.  
  3. 在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码。
  4.  
  5. 但有时执行python manage.py makemigrations命令(也可能人比较皮,把migrations文件夹给删了),会提示"No changes detected." 可能有用的解决方式如下:
  6.  
  7. python manage.py makemigrations --empty yourappname 生成一个空的initial.py
  8.  
  9. python manage.py makemigrations 生成原先的model对应的migration file

django-关于manage.py migrate无效的问题

  1. 问题描述:
  2. 已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,提示No migrations to apply. 表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼
  3.  
  4. 排查过程
  5. python manage.py dbshell 进到数据库里面,查看是否表已存在
  6. 结果:表不存在
  7. 检查migrations文件
  8. 结果:文件没问题
  9. 百度 google 各种搜,乱投医,各种尝试
  10. 解决方案
  11. python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
  12. python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
  13. python manage.py migrate 好啦,大功告成
  14. 原因分析
  15. 查看django_migrations表结构
  16. 建表语句:
  17. 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);
  18. 原因
  19. 造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中00010002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
  20. 避免方案
  21. 有强迫症删除migrations文件的同学(比如我),请同时到数据库中删除相应记录
  22. 没有强迫症的同学,可以继续生成新的migrations,旧的就不必理会了
  23. 题外话
  24. 执行python manage.py migrate之后,可以使用python manage.py sqlmigrate appname migrations_num(例如python manage.py sqlmigrate user 0002)查看当前migrations文件对应的sql语句。
  25. 另外,在使用上述命令查看0002文件的sql语句时发现,django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。

临时解决:

  1. models中添加了一个modelmakemigrations成功后,如果migrate提示no apply --》查看django——migrations是否有对应modelname记录,如果没有记录 --》删除model,再次makemigrationsmigrate(提示无表,数据库中手动创建对应表名)--》再添加model,再次makemigrationsmigrate即可

上述问题出现的根因:项目目录下面没有留存/migrations/ 文件夹及迁移文件,导致,每次项目迁移记得保存好这个目录的文件

django使用migrations迁移版本和数据库中报错解决方案的更多相关文章

  1. 使用mysql5.7版本的mysqldump备份mysql8.0版本的数据库报错解决办法

    使用mysql5.7版本的mysqldump命令执行备份mysql8.0版本的数据库时会报错: mysqldump: Couldn't execute 'SET SQL_QUOTE_SHOW_CREA ...

  2. Django生成脚本迁移文件时,报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

    一.本人环境:django:3.0.2, python:3.8.1,  pymysql:0.9.3 二.解决步骤: 1.django目录下找到 base.py文件: 2.在base.py文件中注释以下 ...

  3. [更新中]【South使用总结】django开发中使用South进行数据库迁移

    Django开发中使用South进行数据库迁移的使用总结 South的详细资料可产看官方文档http://south.readthedocs.org/en/latest South安装配置 pip i ...

  4. HelloDjango 系列教程:第 04 篇:Django 迁移、操作数据库

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,django 还没有把它翻译成数据库语言,因此实际上这 ...

  5. Django学习系列14:第一个数据库迁移

    在Django中,ORM的任务是模型化数据库. 创建数据库其实是由另一个系统负责的叫做迁移. 迁移的任务是根据你对models.py文件的改动情况,添加或删除表和列. 可以把迁移想象成数据库使用的版本 ...

  6. Django迁移数据库报错

    Django迁移数据库报错 table "xxx" already exists错误 django在migrate时报错django migrate error: table 'x ...

  7. Django之路:模型(数据库)和自定义Field以及数据表的更改

    一.Django 模型(数据库) Django模型是与数据库相关的,与数据库相关的代码一般写在models.py中,Django支持sqlite3,MySQL,PostgreSQL等数据库,只需要在s ...

  8. 2 第一个Django应用 第1部分(数据库与模型)

    目标应用: 一个公开的网站,可以让访客查看投票的结果并让他们进行投票. 一个后台管理网站,你可以添加.修改和删除选票. 查看django版本 python -c "import django ...

  9. Django中的app及mysql数据库篇(ORM操作)

    Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都 ...

随机推荐

  1. 图像增强:直方图均衡和小波变换【matlab】

    直方图均衡:统计图像像素灰度的直方图分布.对其进行重新分配以使图像的直方图分布更加均衡. 小波变换:图像轮廓主要体现在低频部分,可以通过对低频分解系数进行增强处理,对高频分解系数进行衰减处理,达到图像 ...

  2. Python爬虫(四)

    爬取雪球网上的房产信息 源码: import requests import json import pymysql # 建立数据库连接 db = pymysql.connect(host=', po ...

  3. std::deque

    deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和删除容器的头部元素 ...

  4. sublime text3 插件CTags

    1.打开Sublime Text 2/3软件,在Preferences(设置)菜单中打开Package Control(插件管理器)打开菜单后找到install packages,搜索ctags, 回 ...

  5. 提高SDN控制器拓扑发现性能

    原文由我发表在sdnlab.com.原文链接:http://www.sdnlab.com/15425.html SDN网络的一大特点就是资源由控制器集中管理,控制器管理网络,最基本的当然需要知道网络的 ...

  6. docker 从容器中拷文件到宿主机器中

    sudo docker cp 1d051604e0ea:/root/data /home/developer/zhanghui/data

  7. [HEOI2015]兔子与樱花[贪心]

    4027: [HEOI2015]兔子与樱花 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1043  Solved: 598[Submit][Stat ...

  8. 【BZOJ4641】基因改造 KMP

    [BZOJ4641]基因改造 Description "人类智慧的冰峰,只有萌萌哒的我寂寞地守望." --TB TB正走在改造人类智慧基因的路上.TB发现人类智慧基因一点也不萌萌哒 ...

  9. Python全栈day26-27(面向对象进阶)

    参考 http://www.cnblogs.com/linhaifeng/articles/6204014.html 1,什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访 ...

  10. About Outlook Rule Quota

    在Exchange中默认有设置outlook的规则的大小,如果client在outlook上设定的规则超过大小会导致功能无法使用 Outlook的郵件規則,在Exchange 2000/2003時,郵 ...