django作为web服务器框架快速开发的操作,一直是我喜爱的,最近在思考django数据库迁移的创建表的问题,记录一下。
python manage.py makemigrations 操作究竟完成了什么?
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2017-12-08 05:47
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('a', '0001_initial'),
('b', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='a',
name='b',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='a.A', verbose_name='\u8ba2\u5355\u8bb0\u5f55'),
),
migrations.RemoveField(
model_name='a',
name='b',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='a.A', verbose_name='\u8ba2\u5355\u8bb0\u5f55'),
),
]
migrations AddField 添加字段 removeField删除 等操作 修改什么的不说了
这一步操作 两个步骤
第一步 对当前的字段进行djano正确格式的校验
第二步 会在数据库的django_migrations的表中生成一个当前迁移文件的引用
python manage.py migrate
django生成操作数据库的语句进行直接操作数据库
这个时候皆大欢喜 就一切很好 但是如果 出现问题的话 就尴尬了
因为数据库操作的时候 生成数据库操作语言是逐条生成的 这就造成一个问题,如果 出现一个字段类型的错误 ,它仍会生成这个字段 那么再下次migrate的时候就会报错,而且总是报错。正确的操作是,在数据库中删除当前字段,然后 用新的迁移文件进行操作。