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使用pyqt写带界面工具的示例代码
Oct 23 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python实现简易Web爬虫详解
Jan 03 Python
基于Python的PIL库学习详解
May 10 Python
Django框架使用mysql视图操作示例
May 15 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
Python和Sublime整合过程图示
Dec 25 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
深入浅析Python代码规范性检测
Jul 31 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
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python中遍历文件的3个方法
2014/09/02 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
简单的python后台管理程序
2017/04/13 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
Python中修改字符串的四种方法
2018/11/02 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
django认证系统 Authentication使用详解
2019/07/22 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
Python 操作 MySQL数据库
2020/09/18 Python
python 实现性别识别
2020/11/21 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
七年级地理教学反思
2014/01/26 职场文书
校运会宣传稿大全
2015/07/23 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Java并发编程必备之Future机制
2021/06/30 Java/Android