遇到models模型变动,变动后合并发生问题,故当时做了删除应用文件夹下migrations文件,由于数据库里无较多新数据,故删除后重建,但重建后执行模型合并操作结果为No Changes,不会对应用模型进行变动:
执行python manage.py makemigrations --empty 你的应用名
执行python manage.py makemigrations
执行python manage.py migrate
Table 'xx' already exists"解决方法
执行python manage.py migrate XXX --fake
migrations机制概述
1. Django应用中的model类
model是业务逻辑的数据对象,包含fields和behaviors。
一种model类就是django.db.models.Model类的扩展。
一种model对应数据库中的一张表。
在myFirstDjangoSite/myFirstApp/models.py中,创建model类的示例如下:
from django.db import models
class MyModel(models.Model):
...
2. migrations文件
在Django应用中,migrations是一系列文件,位于Django应用的migrations目录下,用以存储Django应用中的model类的变化。
每次在Django应用中对model类的修改,都会对应一个migration文件。
一个migration文件与数据库结构的schema的一个版本对应。
从文件名看,migrations文件也是Python软件模块,其中包含各种用以操作数据库的django.db.migrations.operations对象。
3. Django框架中的migrations实现
通过django.db.migrations软件包实现migrations的业务逻辑;
通过SchemaEditor与各种不同的数据库服务器交互,支持多种数据库服务器。
4. migrations相关命令
makemigrations
基于当前的models类创建一个新的migration文件
同时修改myproject/myproject/settings.py中的MIGRATION_MODULES变量的值
MIGRATION_MODULES = {
'mylists': 'mylists.db_migrations'
}
- migrate
将当前的migration文件内容持久化到数据库中
- sqlmigrate
根据输入的migrations名称,输出对应的SQL语句
- showmigrations
显示出Django项目中的所有migrations文件及其状态
python manage.py makemigrations mylists
python manage.py migrate
python manage.py sqlmigrate mylists 0001