Django重置migrations文件的方法步骤

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

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

(0)

相关推荐

  • 浅谈Django学习migrate和makemigrations的差别

    本文主要研究的是Django中migrate和makemigrations的差别,具体如下. 在你改动了 model.py的内容之后执行下面的命令: Python manger.py makemigrations 相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件 你可以手动打开这个文件,看看里面是什么 在此之后执行命令 python manager.py migrate 将该改

  • Django migrations 默认目录修改的方法教程

    如何使用 migrations的使用非常简单: 修改model, 比如增加field, 然后运行 python manager.py makemigrations 你的mmodel会被扫描, 然后与之前的版本作比较, 在app的migrations目录下生成本次迁移文件. 我们建议查看一下该迁移文件, 确保没有问题. 然后运行: python manager.py migrate migrate命令会进行比较, 并应用该迁移. migrations 默认目录修改 群里看到个问题: migrati

  • 解决Django数据库makemigrations有变化但是migrate时未变动问题

    写models.py时缺少了一个 verbose_name,导致数据库出现问题,整了很久,摸索出重新建立数据库的方法: 首先删除每个app中的migrations中的除了init.py的文件,在数据库中清空所有的表,然后执行migrate,这时会自动生成系统默认的那些表,然后执行makemigrations,再执行migrate 如果只是众多应用中的一个出了问题的话,删除与之相关的表,然后进入django_migrations表中,将相应的app那项记录删除,然后再执行 makemigratio

  • Django重置migrations文件的方法步骤

    Django开发过程中如果数据库变动过多导致migrations的文件越来越多,管理起来很不方便, 幸运的是Django提供了一种方式可以是这些文件重置到0001状态,而且不删除原有数据. 确认migration文件跟数据库同步 $ python3 manage.py makemigrations 如果提示 No changes detected 那么数据就是同步的. 查看当前migration文件记录 $ python3 manage.py showmigrations admin [X] 0

  • 解决Django删除migrations文件夹中的文件后出现的异常问题

    migrate文件记录了每一次数据迁移的改变 解决方法:重建数据库 1.删除数据库 错误方法: python manage.py shell from app.models import *Product.objects.raw('drop database') 上面删除数据库的方法是错误的 正确方法: 如果是用默认的sqlite数据库:可以直接右键,将db.sqlite3删掉. 如果用的其他数据库,则进入数据库的控制台,将数据库删掉 2.删除migrations中的文件,只保留__init__

  • Django安装配置mysql的方法步骤

    近期做那个python的开发,今天就来简单的写一下Django安装配置mysql的方法步骤 安装mysql 首先安装pymysql pip install pymysql 然后安装mysqlclient pip install mysqlclient 在安装过程中可能会报类似以下错误(因为我的已经安装成功了,找了类似的图): 在window下安装python的包会出现各种问题,https://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站就是专门用于解决windo

  • Django中使用Celery的方法步骤

    (一).概述 Celery是一个简单.灵活和可靠的基于多任务的分布式系统,为运营提供用于维护此系统的工具.专注于实时处理的任务队列,同时也支持任务的调度.执行单元为任务(task),利用多线程这些任务可以被并发的在单个或多个职程(worker)上运行. Celery通过消息机制通信,通常通过中间人(broker)来分配和调节客户端与职程服务器(worker)之间的通信.客户端发送一条消息,中间人把消息分配给一个职程,最后由职程来负责执行此任务. Celery可以有多个职程和中间人,这样提高了高可

  • C++ 遍历某个文件夹下所有文件的方法步骤

    本文主要介绍了C++ 遍历某个文件夹下所有文件的方法步骤,分享给大家,主要给自己留个笔记.. #include<iostream> #include<string> #include<io.h> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; void fileSearch(string path) { long hFile = 0;

  • Pycharm如何运行.py文件的方法步骤

    Pycharm时一个非常好用的IDE,但是一开始的时候甚至会因为.py文件不能运行而束手无策... 这里需要说明一下Pycharm的作用,Pycharm并不是一个像matlab那样什么都自己提供的软件,它更像一个非常棒的搭桥软件:将Python和.py文件连接在一起.所以当你发现.py文件不能运行时,多半是因为.py文件的路径没有添加. 所以你需要将.py文件的路径添加了,一种是手动的方法: 1 点击配置文件 2 点击添加 3 选择python并添加.py文件路径 比如,本文中的设置如下: 当你

  • pandas处理csv文件的方法步骤

    一.我的需求 对于这样的一个 csv 表,需要将其 (1)将营业部名称和日期和股票代码进行拼接 (2)对于除了买入金额不同的的数据需要将它们的买入金额相加,每个买入金额乘以买卖序号的符号表示该营业名称对应的买入金额 比如:xx公司,20190731,1,股票1,4000,C20201010,xxxx 我这里想要的结果是:xx公司2019713C20201010,4000 二.代码 (1)首先由于文件是 gbk,所以读取是需要注意 encoding (2)日期是int类型,所以需要转化为 字符串

  • 使用navicat导入sql文件的方法步骤

    一.打开navicat,打开连接,右击连接名(如果新建连接,需要使用对应数据库的ip地址和密码,本机的是地址localhost,密码是自己mysql数据库的密码),选择新建数据库,数据库名要和想要导入的文件名一样(这种情况针对的是sql文件是直接由整个数据库导出的一个sql文件,如果表导出的sql文件,应该是随便命名数据库的名字,表名应该是和需要导入的文件名字相同(第二种情况没有亲自试过)). 二.右击建好的数据库,选择运行SQL文件,在出现的页面中选择要导入的SQL文件.然后点击开始,等待导入

  • Navicat Premium如何导入SQL文件的方法步骤

    今天开始写期末项目,不过今年用的MySQL数据库,所以就用了Navicat premium进行管理,数据库是另一个小伙伴写的,需要导入,但是Navicat没有直接导入SQL文件的按钮,尝试了几次,都不行,查了度娘,好多都文不对题,最后终于解决,写一下解决方案,原来很简单.... 1.首先,链接上Navicat,在链接下新建数据库,数据库名和要导入的一样,字符集选utf-8,确定 2.先右键点击打开数据库,然后,直接将数据库文件拖拽到新建的数据库上 3.弹出这个对话框,直接点击开始,完成后.然后直

  • java项目导出为.exe执行文件的方法步骤

    将java项目导出为.exe执行文件需要借助于第三方软件,本文我们选择jar2exe软件. 第一步:先安装jar2exe软件,安装直接选择默认步骤即可. 第二步:需要将项目导出为jar文件,请参考上一篇文章. 第三步:打开Jar2Exe Wizard 2.5 第四步:选择你要输出的jar文件全路径以及所使用的平台,运行时JRE的版本,建议选此软件支持的最低版本和最高版本即可. 第五步:选择是控制台程序.图形化界面或服务器程序 .本文所操作的项目时GUI的 第六步:选择运行的主类 第七步:对应字节

随机推荐