django-关于manage.py migrate无效的问题

问题描述:

已有的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的时候,不必担心原有数据会丢失。
---------------------

转载原文链接:https://blog.csdn.net/qq_25730711/article/details/60327344

原文地址:https://www.cnblogs.com/huagongzi/p/11323006.html

时间: 2024-08-01 19:07:14

django-关于manage.py migrate无效的问题的相关文章

Django 中 python manage.py makemigrations 与 python manage.py migrate

执行 python manage.py makemigrations django根据settings.py里面的INSTALLED_APPS项设置找到对应app里的models.py,应用里面创建的继承models.Model的类来,生成一个文件,记录着生成数据库表结构的一些数据. INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.co

初试django(一)---python manage.py makemigrations以及python manage.py migrate

无论当我们第一次在models.py中创建类对象还是对类中的属性进行修改,我们都会使用python manage.py makemigrations 和 python manage.py migrate 两个命令. 在models中第一次创建models类,如图所示 下面使用python manage.py makemigrations 命令: 红线框中表示在blog应用目录下的migations的文件下多了一个001的文件,我们来看看这个文件中的具体内容是什么: 这个文件里面的内容表示我们创建

Django 笔记 manage.py sync 错误

大年三十大家不放鞭炮果然安静了好多,没事继续看django的书 前几天看到了数据模型就一直卡在那里,今天特地把mysql替换成文本数据库sqlite试试看 但是遇到了manage.py sync 错误,无法创建初始数据库 C:\OneDriver\OneDrive\python\csvr>python manage.py sync Unknown command: 'sync' Type 'manage.py help' for usage. 然后help了一下,尼玛果然连sync参数都没有 C

Django中manage.py 常用命令

python manage.py startproject djotest python manage.py startapp djoapp python manage.py runserver python manage.py runserver 8000 python manage.py runserver 0:8000 python manage.py makemigrations python manage.py sqlmigrate polls 0001 python manage.p

No module named _sqlite3 django python manage.py runserver

linux 执行django(python manage.py runserver),报错No module named _sqlite3,需要安装sqlite-devel,再重新编译安装python. 1.安装sqlite-devel yum install sqlite-devel 2.重新安装python tar -zxf Python-2.7.3.tgz cd Python-2.7.3 ./configure make && make install 然后就可以了.

django python manage.py runserver 流程

python manage.py runserver 流程分析 版本 python27 django 1.0 搭建可运行的环境 创建python27 虚拟环境 github 下载 django-1.0.tar.gz(1.0 版本的django) 解压 可以看到,有个 demo 在 examples 目录 把 django 目录拷贝到 examples 下面,这样 example 可以正确导入 django1.0 启动项目 python manage.py runserver 项目启动成功,可以修

manage.py migrate 报错

第一个提示,setting里面的 STATICFILES_DIRS = (  os.path.join(BASE_DIR,'static')) 第二行的后面加','解决,这样可以被识别是tuple. 第二个提示,安装Pillow. 第三个提示,需要设置DATABASES ,default加一个 'OPTIONS': {  'autocommit': True,  'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, 可以解决.

[转]django 1.9之后python manage.py syncdb没有了

django 1.9之后 python manage.py syncdb 改成了 python manage.py migrate 或者 python manage.py makemigrations

django 1.9之后python manage.py syncdb没有了

django 1.9之后 python manage.py syncdb 改成了 python manage.py migrate 或者 python manage.py makemigrations