django orm 之makemigrations和migrate命令
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命令的更多相关文章
- Django ORM模型的一点体会
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- Django ORM模型:想说爱你不容易
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- 理解Django的makemigrations和migrate
在你改动了 model.py的内容之后执行下面的命令: python manger.py makemigrations 相当于在该app下建立 migrations目录,并记录下你所有的关于modes ...
- 【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来
[问题原因]:django工程中存在多个应用,每个应用都指定了对应的数据库.执行python manage.py migrate命令时没有指定数据库,将只初始化默认的default数据库. [解决方案 ...
- 数据库表反向生成(二) Django ORM inspectdb
在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...
- Django ORM基本的单表增删改查
创建表 步骤: 1.app下models.py里创建类(继承models.Model) from django.db import models class UserInfo(models.Model ...
- Django ORM 数据库操作
比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 ...
- Django 2.0 学习(14):Django ORM 数据库操作(上)
Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...
- 【python】-- Django ORM(基础)
Django ORM(基础) Django 框架十分强大,自带数据库操作功能.Django 跟 SQLAchemy 一样,也是通过ORM(Object Relational Mapping,关系对象映 ...
随机推荐
- 奇异值分解(SVD)原理及应用
一.奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征. ...
- wcf 的 知识点
1. wcf 的9种 协议
- caffe怎么把全连接层转成convolutional层
caffe中有把fc层转化为conv层的,其实怎么看参数都是不变的,对alex模型来说,第一个fc层的参数是4096X9216,而conv的维度是4096x256x6x6,因此参数个数是不变的,只是需 ...
- window7配置python3.3 + django + apache24 + mod_wsgi
window7安装配置python3.3 + django + apache24 + mod_wsgi 1.下载版本的时候要对应 2.apache24 别放系统盘, 不然权限很麻烦 3.django ...
- Json数据常用操作
JSON字符串: var str1 = '{ "name": "cs", "sex": "man" }'; JSON对象 ...
- Python线程创建与使用
Python多为线程编程提供了两个简单明了的模块:thread和threading,Python3中已经不存thread模块,已经被改名为_thread,实际优先使用 threading模块. 1.P ...
- What is JPA
What is JPA JPA可以看做是EJB3.0的一部分,但它又不限于EJB 3.0,你可以在Web应用.甚至桌面应用中使用.JPA只是一种Java持久化标准,它意在规范ORM(对象关系映射模型) ...
- 微信小程序开发入门学习(1):石头剪刀布小游戏
从今天起开始捣鼓小程序了2018-12-17 10:02:15 跟着教程做了第一个入门实例有兴趣的朋友可以看看: 猜拳游戏布局 程序达到的效果 猜拳游戏的布局是纵向显示了三个组件:文本组件(tex ...
- web前端工程师面试技巧 常见问题解答
web前端工程师面试技巧 常见问题解答 每年的春招是各企业需求人才的黄金时期,不少的前端大牛或者前端新手在面试时候不知道怎么来回答面试官的问题,下面来看下我转载的这篇文章吧,希望对从事前端工作的你有所 ...
- scrapy--cnblogs
之前一直在学习关于滑块验证码的爬虫知识,最接近的当属于模拟人的行为进行鼠标移动,登录页面之后在获取了,由于一直找不到滑块验证码的原图,无法通过openCV获取当前滑块所需要移动的距离. 1.机智如我开 ...