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 smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
50行Python代码实现人脸检测功能
Jan 23 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
python标准库os库的函数介绍
Feb 12 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
如何用python识别滑块验证码中的缺口
Apr 01 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 时间转换Unix时间戳代码
2010/01/22 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
javascript静态的url如何传递
2007/05/03 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
python列表推导式入门学习解析
2019/12/02 Python
Python ORM编程基础示例
2020/02/02 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
渡河少年教学反思
2014/02/12 职场文书
甜品店创业计划书
2014/08/14 职场文书
优秀高中学生评语
2014/12/30 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python