django-关于manage.py migrate无效的问题
django 关于 无效 py 问题 manage migrate
2023-09-14 08:58:26 时间
django-关于manage.py migrate无效的问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25730711/article/details/60327344
问题描述:
已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py
之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations
确认成功,执行python manage.py migrate
,提示No migrations to apply.
表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼
排查过程
python manage.py dbshell
进到数据库里面,查看是否表已存在
结果:表不存在- 检查migrations文件
结果:文件没问题 - 百度 google 各种搜,乱投医,各种尝试
解决方案
python manage.py dbshell
进到数据库中,执行delete from django_migrations where app='your_appname';
python manage.py makemigrations
(若migrations文件未删除,可不执行这一步)python manage.py migrate
好啦,大功告成
原因分析
- 查看django_migrations表结构
建表语句:CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL);
- 原因
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
避免方案
- 有强迫症删除migrations文件的同学(比如我),请同时到数据库中删除相应记录
- 没有强迫症的同学,可以继续生成新的migrations,旧的就不必理会了
题外话
执行python manage.py migrate
之后,可以使用python manage.py sqlmigrate appname migrations_num
(例如python manage.py sqlmigrate user 0002
)查看当前migrations文件对应的sql语句。
另外,在使用上述命令查看0002文件的sql语句时发现,django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。
相关文章
- Django中SQL查询
- django简单使用restframework
- 用PyCharm建Django工程
- 第四百零六节,自定义用户表类来继承Django的用户表类,
- 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍
- django中对model模型添加方法
- pythonanywhere使用:进入虚拟机及修改django项目的css样式
- Python Django 配置admin后台管理类代码示例
- Python Django 生成随机字符串UUID的使用示例
- Python编程:使用supervisor管理Django-Celery进程
- Django实战之添加markdown编写文章的支持