Django重置migrations文件的方法步骤

本文介绍了两种Django重置migrations文件的方法。一种情况是完全清空数据库,另一种是保留数据但清空migration历史。通过删除迁移历史、回滚、重新生成等方式,确保migrations回到初始状态并保持数据库数据的完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非常漂亮的界面

场景 一
不考虑数据库数据,可以完全清空数据库
在项目settings位置 也就是项目根目录下 执行

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
# . 点是当前目录。删除所有 除了init.py文件

删除数据库
重新生成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

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

python3 manage.py makemigrations

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

查看当前migration文件记录

python3 manage.py showmigrations

重置文件

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

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

重新生产migrate文件

python3 manage.py makemigrations

同步到数据库

python3 manage.py migrate --fake-initial

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

这些就清爽多了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值