Django重置migrations文件的方法步骤


Posted in Python onMay 01, 2019

Django开发过程中如果数据库变动过多导致migrations的文件越来越多,管理起来很不方便, 幸运的是Django提供了一种方式可以是这些文件重置到0001状态,而且不删除原有数据。

确认migration文件跟数据库同步

$ python3 manage.py makemigrations

如果提示 No changes detected 那么数据就是同步的。

查看当前migration文件记录

$ python3 manage.py showmigrations
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
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
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
isite
 [X] 0001_initial
 [X] 0002_article_pub_date
sessions
 [X] 0001_initial

重置文件

python3 manage.py migrate --fake mysite zero # mysite是app的名称

删除migrations的处init.py的其他文件

重新生产migrate文件

$ python3 manage.py makemigrations

同步到数据库

python3 manage.py migrate --fake-initial
Operations to perform:
 Apply all migrations: admin, auth, contenttypes, isite, sessions
Running migrations:
 Applying isite.0001_initial... FAKED

fake是假冒伪装的意思。执行过程,但不应用数据。

这些就清爽多了。

场景一

不考虑数据库数据,可以完全清空数据库。

步骤:

删除所有migrations

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete

删除数据库

重新生成migrations

python manage.py makemigrations
python manage.py migrate

场景二

有时候我们会直接导入完整的数据库,包括数据,这种情况下就不能简单的清空数据库。

这时我们的目的就是:清空数据库的migration history,保证以后的migrate能正常使用,但要保留其他数据。

步骤:

从数据库中删除所有非0001_initial的migration history

DELETE FROM django_migrations WHERE app IN ('your','app','labels') AND name != '0001_initial'

使用migrate命令回滚0001_initial的migration history

python manage.py migrate --fake your zero
python manage.py migrate --fake app zero
python manage.py migrate --fake labels zero

重新生成0001_initial,如果能保证已有0001_initial已是最新的,可跳过此步

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete

python manage.py makemigrations

在数据库中生成新的0001_initial记录

python migrate --fake-initial

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python库urllib与urllib2主要区别分析
Jul 13 Python
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python安装第三方库的3种方法
Jun 21 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python反射的用法实例分析
Feb 11 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
Python实现直播推流效果
Nov 26 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 #Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 #Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 #Python
python实现定时压缩指定文件夹发送邮件
Dec 22 #Python
python定时复制远程文件夹中所有文件
Apr 30 #Python
python实现图片转字符小工具
Apr 30 #Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 #Python
You might like
提升PHP执行速度全攻略(上)
2006/10/09 PHP
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
PHP用户指南-cookies部分
2006/10/09 PHP
什么是MVC,好东西啊
2007/05/03 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python守护线程用法实例
2017/06/23 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
详解python的argpare和click模块小结
2019/03/31 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
体育专业自荐书
2014/05/29 职场文书
技术员岗位职责范本
2015/04/11 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Python Flask实现进度条
2022/05/11 Python