已有的model,修改以后,想从新建模,因而将migrations文件夹中除__init__.py
以外其余文件都删掉,再次执行如下步骤Python manage.py makemigrations
确认成功,执行python manage.py migrate
,提示No migrations to apply.
表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼python
python manage.py dbshell
进到数据库里面,查看是否表已存在python manage.py dbshell
进到数据库中,执行delete from django_migrations where app='your_appname';
python manage.py makemigrations
(若migrations文件未删除,可不执行这一步)python manage.py migrate
好啦,大功告成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);
No migrations to apply.
执行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的时候,没必要担忧原有数据会丢失。mysql
***************************华丽分割线***********************sql
场景2:shell
在修改了models.py后,有些用户会喜欢用Python manage.py makemigrations生成对应的py代码。数据库
但有时执行python manage.py makemigrations命令,会提示"No changes detected." 可能有用的解决方式以下:django
1. 直接使用python manage.py migrate.app
可能会先生成对应数据库的py代码,再自动执行这段代码,建立数据库表格 (我没有仔细去读文档 不清楚这条命令的逻辑)google
2. 来自:https://docs.djangoproject.com/en/1.8/topics/migrations/spa
先 python manage.py makemigrations --empty yourappname 生成一个空的initial.py.net
再 python manage.py makemigrations 生成原先的model对应的migration file