makemigrations:将模型的更改生成迁移脚本文件。模型所在的app,必须放在settings.py中的INSTALLED_APPS列表中。这个命令有以下几个常用选项:

  1、app_label:后面可以跟一个或者多个app,那么就只会针对这几个app中模型的变化生成迁移脚本。如果没有任何的app_label,默认会检查INSTALLED_APPS中所有的app下的模型,针对每一个app中models的改变都生成相应的迁移脚本,注意生成的这些个迁移脚本文件都存放在各个app下的migrations下。

  2、--name:给这个迁移脚本指定一个名字,如果不指定名字,那么生成的脚本文件的名称将会不那么见名知意。

  3、--empty:生成一个空的迁移脚本。如果你想写自己的迁移脚本,可以使用这个命令来实现一个空的文件,然后自己再在文件中写迁移脚本。

migrate:将新生成的迁移脚本,映射到数据库中,创建新的表或者修改表的结构。执行python manage.py migrate命令会执行两个步骤:

  1、执行对应app(默认为INSTALLED_APPS下所有的app,当然也可以指定app名称)下的migrations文件夹下的迁移脚本文件并映射到数据表,除了第一个迁移脚本文件没有依赖,其余的迁移脚本文件都会依赖前一个,在执行迁移脚本文件的时候,django首先会检查'django_migrations'表中的记录,执行指定的迁移脚本(默认为最新的,可以指定app和迁移脚本文件版本名称),会依次执行它依赖的迁移脚本文件,直到这个依赖已经执行过了(会在'django_migrations'有记录)

  2、将已经执行的迁移脚本文件记录在django默认生成的'django_migrations'表中

app_label:将某个app下的迁移脚本映射到数据库中。如果没有指定,那么会将所有在INSTALLED_APPS中的app下的模型都映射到数据库中。
app_label migrationname:将某个app下指定名字的migration文件映射到数据库中。

执行migrate命令可能会报错,报错的主要原因是数据库的'django_migrations'表中的迁移版本与对应数据表中的数据表结构生成所需的迁移脚本相冲突。下面两个命令是解决报错的可用方法:

  1、--fake:可以将指定的迁移脚本名字添加到数据库中。但是并不会把迁移脚本转换为SQL语句,修改数据库中的表。使用与数据表结构所需迁移脚本比已执行的迁移脚本超前。
  2、--fake-initial:将第一次生成的迁移文件版本号记录在数据库中。但并不会真正的执行迁移脚本。使用于迁移脚本文件缺少并且很乱,可以把表的结构与models里的结构弄一致,删除所有迁移脚本,清空所有这个app相关的'django_migrations'数据。执行makmigrations,然后执行--fake-initial,继续正常的些其他表内容

showmigrations:查看某个app下的迁移文件。如果后面没有app,那么将查看INSTALLED_APPS中所有的迁移文件。

sqlmigrate:查看某个迁移文件在映射到数据库中的时候,转换的SQL语句

django orm 之makemigrations和migrate命令的更多相关文章

  1. Django ORM模型的一点体会

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  2. Django ORM模型:想说爱你不容易

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  3. 理解Django的makemigrations和migrate

    在你改动了 model.py的内容之后执行下面的命令: python manger.py makemigrations 相当于在该app下建立 migrations目录,并记录下你所有的关于modes ...

  4. 【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来

    [问题原因]:django工程中存在多个应用,每个应用都指定了对应的数据库.执行python manage.py migrate命令时没有指定数据库,将只初始化默认的default数据库. [解决方案 ...

  5. 数据库表反向生成(二) Django ORM inspectdb

    在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...

  6. Django ORM基本的单表增删改查

    创建表 步骤: 1.app下models.py里创建类(继承models.Model) from django.db import models class UserInfo(models.Model ...

  7. Django ORM 数据库操作

    比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 ...

  8. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  9. 【python】-- Django ORM(基础)

    Django ORM(基础) Django 框架十分强大,自带数据库操作功能.Django 跟 SQLAchemy 一样,也是通过ORM(Object Relational Mapping,关系对象映 ...

随机推荐

  1. 线程 task 使用三种方法

    1:用TaskFactory的实例: 运行结果为: 2. 使用task类的Factory属性 3.使用task类的实例,用start来启动任务.  当我们用Task类时,除了用start方法,也可以用 ...

  2. prepareStatament和Statement和callableStatement的区别

    关系与区别 Statement.PreparedStatement和CallableStatement都是接口(interface) Statement 1.Statement接口提供了执行语句和获取 ...

  3. macOS Sierra系统偏好设置->安全性和隐私->通用中的“任何来源” 选项开与关

    显示"任何来源"选项在控制台中执行: sudo spctl --master-disable 不显示"任何来源"选项(macOS 10.12默认为不显示)在控制 ...

  4. 武者Vue

    1 - Introduction 2 - The Vue Instance 3 - Data & Methods 4 - Data Binding 5 - Events 6 - Event M ...

  5. c++标准之IO库

    1.面向对象的标准库 2.多种IO标准库工具 istream,提供输入操作 ostream,提供输出操作 cin:读入标准输入的istream对象.全局对象extern std::istream ci ...

  6. js对象动态添加属性,方法

    1. 动态添加属性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>> ...

  7. linux环境下安装 openOffice 并启动服务

    一.背景故事 这两天遇到一个大坑,客户要做office 文档在线预览功能,于是乎就要把office文档转换成pdf交给前端显示.      在某度找了一圈都说openOffice+jodconvert ...

  8. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  9. list函数及list对象的reverse方法

    list的reverse方法,是就地reverse,不返回值 如a是一个list,a.reverse()直接将a这个list给reverse了,所以如果print(a.reverse())就是None ...

  10. python入门基本知识

    1. 什么是语言 语言是一个事物与另外一个事物沟通的介质. python则是人(程序员)与计算机沟通的介质. 2. 什么是编程 编程就是程序员将自己想要让计算机做的事情用编程语言翻译出来写到一系列的文 ...