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检测远程udp端口是否打开的方法
Mar 14 Python
python中sleep函数用法实例分析
Apr 29 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
python DataFrame 取差集实例
Jan 30 Python
Python matplotlib画图与中文设置操作实例分析
Apr 23 Python
Python 导入文件过程图解
Oct 15 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
jupyter 导入csv文件方式
Apr 21 Python
Python读写压缩文件的方法
Jul 30 Python
Python如何利用正则表达式爬取网页信息及图片
Apr 17 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
浅谈Python协程asyncio
Jun 20 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简单计算页面加载时间的方法
2015/06/19 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
js实现分割上传大文件
2016/03/09 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
代码整洁之道(重构)
2018/10/25 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python执行子进程实现进程间通信的方法
2015/06/02 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python 输出所有大小写字母的方法
2019/01/02 Python
python语言元素知识点详解
2019/05/15 Python
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
连锁超市项目计划书
2014/09/15 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
开学典礼致辞
2015/07/29 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
Python循环之while无限迭代
2022/04/30 Python
Golang实现可重入锁的示例代码
2022/05/25 Golang