Djang重新整理migrations,解决:Django Table xxx already exist

在开发过程中,由于需求变更或者自我重构,需要清理migrations,以保持代码整洁和后续的可维护性。

场景一
不考虑数据库数据表,可以完全清空数据库里面的表的数据。
步骤:
删除所有migrations
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete
删除数据库的相关表
python manage.py makemigrations yourappname
python manage.py migrate yourappname

场景二

保留原有数据表的情况

这个情况是开发中最为常见的,也是操作起来稍微复杂一点的情况,但是只要遵循下面的操作步骤,就不会引发任何错误:

1.检查migrations文件夹下面的修改记录文件是否与数据库保持一致,如若我们执行这个命令

python manage.py makegrations

执行结果显示:

No changes detected

那我们就可以继续执行下面的步骤

2.查看当前项目下所有APP对应的已经生效的(已经成功执行的)migration文件,命令如下:

python manage.py showmigrations

结果如下图所示,前面的[x]表示已经执行过的文件,如:imooc这个APP下执行过两次操作

admin[X] 0001_initial[X] 0002_logentry_remove_auto_add
auth[X] 0001_initial[X] 0002_alter_permission_name_max_length[X] 0003_alter_user_email_max_length[X] 0004_alter_user_username_opts[X] 0005_alter_user_last_login_null[X] 0006_require_contenttypes_0002[X] 0007_alter_validators_add_error_messages[X] 0008_alter_user_username_max_length
contenttypes[X] 0001_initial[X] 0002_remove_content_type_name
imooc[X] 0001_initial[X] 0002_auto_20190122_0929
sessions[X] 0001_initial

3.重置你的APP的操作,使它们恢复到没有执行的状态,这里注意一下fake前面的符号,是两个“-”,另外,imooc是APP的名字,记得将它替换成你的APP名字。还有一点就是不要直接复制,要手敲到终端才不会因格式问题而产生错误。fake参数该怎样理解呢?fake是假装的意思,在这里我们可以理解为假设我们将这些操作设置为没有执行的状态,而不是他们真的没有执行!

python manage.py migrate --fake imooc zero

结果如下,则显示重置成功

(wprkplace) D:\PythonProject\learn>python manage.py migrate --fake imooc zero
Operations to perform:Unapply all migrations: imooc
Running migrations:Rendering model states... DONEUnapplying imooc.0005_hua... FAKEDUnapplying imooc.0004_xiao... FAKEDUnapplying imooc.0003_ming... FAKEDUnapplying imooc.0002_auto_20190122_0929... FAKEDUnapplying imooc.0001_initial... FAKED

然后我们可以再次执行showmigrations的命令,查看一下各个操作的状态

(wprkplace) D:\PythonProject\learn>python manage.py showmigrations
admin[X] 0001_initial[X] 0002_logentry_remove_auto_add
auth[X] 0001_initial[X] 0002_alter_permission_name_max_length[X] 0003_alter_user_email_max_length[X] 0004_alter_user_username_opts[X] 0005_alter_user_last_login_null[X] 0006_require_contenttypes_0002[X] 0007_alter_validators_add_error_messages[X] 0008_alter_user_username_max_length
contenttypes[X] 0001_initial[X] 0002_remove_content_type_name
imooc[ ] 0001_initial[ ] 0002_auto_20190122_0929[ ] 0003_ming[ ] 0004_xiao[ ] 0005_hua
sessions[X] 0001_initial

可以看到imooc这个APP下面的操作全部重置为没有执行的状态,[x]变成了[ ],注意是假设它没有执行!

4.然后放心大胆地删除migrations文件夹下面,除了__init__.py文件,的所有的带有序号的py文件,包括pycache文件夹!

5.执行下面的命令,再次为这个APP 生成 0001_initial.py 之类的文件

python manage.py makemigrations

提示如下则为成功

(wprkplace) D:\PythonProject\learn>python manage.py makemigrations
Migrations for 'imooc':imooc\migrations\0001_initial.py:- Create model Hua- Create model Ming- Create model Post- Create model Tag- Create model Test- Create model Xiao

6.执行下面的命令,使刚刚生成的0001_initial.py文件记录到django_migrations数据表中,这个表是django自动生成的,用于记录每次执行的数据库修改操作,表中有四个字段,name和app是对应的关系,意为某某APP下的某某操作。

python manage.py migrate --fake-initial

结果如下即为成功

(wprkplace) D:\PythonProject\learn>python manage.py migrate --fake-initial
Operations to perform:Apply all migrations: admin, auth, contenttypes, imooc, sessions
Running migrations:Applying imooc.0001_initial... FAKED

如果你再去看一下django_migrations这个表,你会发现这个表添加了一条记录,一般来说如果我们真的执行了数据库的修改操作才会生成这样一条记录,但是我们用了fake这个“假装”的操作,所以其实仅仅是添加了一条记录而已,并没有实际修改数据表,也就是这样,完成了migrations文件夹的重置!

 

 


需要保留数据里面的数据,这种场景最为常见,只改结构不改数据
步骤:
使用migrate命令回滚0001_initial的migration history,回滚到最初
python manage.py migrate --fake yourappname zero

重新生成0001_initial,如果能保证已有0001_initial已是最新的,可跳过此步
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete

python manage.py makemigrations yourappname

在数据库中生成新的0001_initial记录
python migrate --fake-initial yourappname

另外,对于已经长期运行的项目,为了保留历史重大版本,不建议回到最初的版本,不利于版本控制。

如果中间有报错:
Django Table xxx already exist
python manage.py migrate --fake appname

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全随笔2:对称加密应用场景

MD5或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法。 首先,简单介绍下这两类算法。图9-1是对称算法的示意图: 图9-1 对称算法 在对称算法中,首先需要发送方和接收方协定一个密钥…

python安装多久_python安装与使用

1、进入官网下载python软件 python-3.4.4.amd64.msi http://www.python.org/download/ 这个软件包含三个环境,如下图:2、双击安装软件 3、设置环境变量path";C:\Python34"; 4、验证是否安装成功 进入cmd中,输入python,如果出现如下…

CSS中的块元素,内联元素,内联块元素

块元素,内联元素,内联块元素 元素就是标签,布局中常用的有三种标签,块元素、内联元素、内联块元素,了解这三种元素的特性,才能熟练的进行页面布局。 块元素块元素,也可以称为行元素,布局中常用的标签如&…

django 与 vue 的完美结合

最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vue。看了vue的一些文档,还有一些项目,先说一下django…

东芝确定半导体重组计划:保留闪存其他全卖

会计丑闻给日本东芝公司的业绩带来严重影响,为了提高盈利,东芝正在对旗下的半导体、个人电脑、白色家电等业务进行一次重大重组。据日经新闻1月23日报道,东芝已经正式制定了芯片业务重组的详细计划,除了占据优势的闪存芯片之外&am…

python画两条曲线图_python绘制多个曲线的折线图

这篇文章利用的是matplotlib.pyplot.plot的工具来绘制折线图,这里先给出一个段代码和结果图: # -*- coding: UTF-8 -*- import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt #这里导入你自己的数据 #...... #...... #x_axix&a…

oracle 截取字指定的字符串

过滤指定的字符串,一字符串有重复的数据内容,所以需要去掉重复的内容,subst()截取 起止下标;instr()获取终止下标位置 例如:substr(p.address, 0, instr(p.address, -, 1, 1)-1) ); case when length(substr(p.address, 0, instr(p.address, -, 1, 1)-1) ) 13 then substr(sub…

数据分级分类实施指南_运营商行业数据安全治理实践

建立组织构建大数据安全保障组一、大数据安全保障工作组职责 1、负责制定大数据信息安全策略,明确信息安全目标。 2、组织相关平台负责人定期召开信息安全会议。 3、负责客户数据安全突发事件应急方案实施和大数据信息系统日常安全运行管理的组织协调及决策工作。 4…

servlet中中文正常显示,mysql数据库手动插入中文正常显示,servlet向mysql中插入中文显示乱码...

作者:http://5563447.blog.51cto.com/5553447/1422627 问题是:就是POST请求提交表单数据给servlet,通过JDBC插入Mysql,出现中文乱码。 解决方式:在url后面加这句 ?useUnicodetrue&characterEncodingutf-8 我的项目: 结果&am…

垃圾回收算法_垃圾回收算法有哪些

垃圾检测通常通过建立一个根对象的集合以及建立一个从这些根对象开始能够触及的对象集合来实现。如果正在执行的程序可以访问到根对象和某个对象之间存在引用路径,这个对象就是可触及的。对于程序来说,根对象总是可以访问的。从这些根对象开始&#xff0…

不错的电子书下载网站

为什么80%的码农都做不了架构师?>>> www.jb51.net 电子书质量不错,虽然是扫描版的,但是都是高清的. vdisk.weibo.com 网盘, 内容很多! 转载于:https://my.oschina.net/GMT/blog/1188971

GeoHash核心原理解析

原文地址:http://www.cnblogs.com/LBSer/p/3310455.html geohash for php:附件下载geohash.tar.gz 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西。某一天机机到北海公园游玩,肚肚饿了&am…

[转载]流行视频格式讲解

*. MPEG/.MPG/.DAT MPEG也是Motion Picture Experts Group 的缩写。这类格式包括了 MPEG-1, MPEG-2 和 MPEG-4在内的多种视频格式。MPEG-1相信是大家接触得最多的了,因为目前其正在被广泛地应用在 VCD 的制作和一些视频片段下载的网络应用上面,大部分的…

解决Ubuntu中文件管理器死掉的情况

有时会遇到Ubuntu文件管理器死掉的情况,怎么点击都没有反应,这时只需在终端上运行 ps -A | grep nautilus, 查找文件管理器nautilus对应的pid,然后sudokillpid就可以关闭文件管理器进程,随便点击一个文件夹就可以重启文件管理器了…

element table 怎么知道点击的是第几行_el-data-table, 让CRUD更简单??

基于Vue2.x, element-ui 2.x,以及开源组件el-form-renderer封装了一个业务组件el-data-table,已在github开源,其目标是:makes restful api crud easily 特点:1. 使用axios自动发送请求2.自带新增/修改/删除逻辑(默认新…

样本量

sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 根据power,effect size,a,决定样本量 # -*- cod…

【Python】 dict 以key名 去重运算

将日期相同的数据统计在一起 a_count [ {create_time: 2020-03-05, total_len: 1, count_invite: 1}, {create_time: 2020-03-11, total_len: 2, count_invite: 2}, {create_time: 2020-03-18, total_len: 2, count_invite: 2}, {create_time: 2020-03-06, total_len: 1, …

qt获得 cpu 主频信息_高主频有什么用?我们玩了几款3A大作找到答案

[PConline 杂谈]对于热爱游戏的人来说,能在极致特效下流畅运行喜欢的游戏是一件幸事,因此作为影响游戏运算的CPU重要性不容小视。CPU如何判定?众所周知,核心数和主频算是判定一个CPU好坏的主要依据,但大多数CPU产品在高…

python爬取有道翻译

python爬虫爬取有道翻译教程 编写环境 为了宝宝们能够正确读懂本教程,在正式开始前,宝宝们需要搭建的环境如下: 连接互联网的win10电脑,(win7也可以)Google浏览器(版本无要求)Python(版本3就可以了),如果没有安装的小伙伴可以参考python安装以及版本检测requests库(版本没啥…

PartitionMotionSearch()

Outline: 1、 CFG文件中有关多参考帧的相关选项 2、 多参考帧涉及到的数据结构和全局变量 3、 保存重建图像为参考帧 4、 编码一帧前,设置参考帧列表 5、 多参考帧的使用(即参考帧的选择策略问题) 6、 遗留问题 1、CFG文件中有关多参考…