Django ORM 知识概要
- 相关命令
python3 manage.py makemigrations
根据模型生成相关迁移文件python3 manage.py migrate
根据迁移文件,将表结构更新到数据库中,并在Django中带的migrations数据表中更改数据库记录
- 字段
- 常用的字段
- 自增长字段
- models.AutoField()
- models.BigAutoField()
- 二进制数据
- models.BinaryField()
- 布尔型
- 允许为空 models.BooleanField()
- 不允许为空 models.NullBooleanField()
- 整型
- 5个字节的正整数models.PositiveSmallIntegerField()
- 6个字节的整数
models.SmallIntegerField() - 11个字节的整数
models.IntegerField() - 20个字节的整数
models.BigIntegerField()
- 字符串类型
- varchar
models.CharField(max\_length=100) - longtext
models.TextField()
- varchar
- 时间日期类型
- 年月日
models.DateField() - 年月日时分秒
models.DateTimeField() - 一段时间,在数据库中是int类型,底层是 Python timedelta 实现
models.DurationField()
- 年月日
- 浮点型
- models.FloatField()
- 可以指定整数多少位,小数多少位
models.DecimalField()
- 其它字段
- 邮箱
models.EmailField() - models.ImageField()
- models.FileField()
- models.FilePathField()
- models.URLField()
- models.UUIDField()
- IP地址,可以是IPV4,也可以是IPV6
models.GenericIPAddressField()
- 邮箱
- 自增长字段
- 关系型字段
- 一对一
models.OneToOneField(Model) - 多对一
models.ForeignKey(Model) - 多对多
models.ManyToManyField(Model)
- 一对一
- 字段类型参数
- 所有字段都有的参数
- db_column='name'
- primary_key=True
- verbose_name='别名或者注释'
- unique=True
- null=True,blank=True
- db_index=True 给表单建立索引
- help_text='' 表单中显示帮助信息
- editable=False 表单不可编辑
- 个别字段才有的参数
- 给CharField 指定最大长度 max_length=100
- 时间
- unique_for_date=True
- unique_for_month=True
- auto_now=True 更新时间
- auto_now_add=True 新增时间
- 浮点型 Decimal
- max_digits=4 表示一共有多少位数
- decimal_places=2 表示小数有多少位
- 关系型字段的参数
- related_name='name' 反向查询时候可能会用到
- on_delete=value
value的值- CASCADE:删除引用的对象时,也删除引用它的对象
- PROTECT:禁止删除引用的对象。SQL等价物:RESTRICT。
- SET_NULL:将引用设置为NULL(要求字段可以为空),当字段设置null=True才可以使用
- SET_DEFAULT:设置默认值。只有当字段设置了default参数时才能使用 SQL等价物:SET DEFAULT。
- SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。
- DO_NOTHING:SQL等价物:NO ACTION。
- 自关联
- 写法一:
modles.ForeignKey('self',verbose_name='自关联') - 写法二:
modles.ForeignKey('Model',verbose_name='自关联')
- 写法一:
- 所有字段都有的参数
- 常用的字段
- 元数据,Meta类定义了一些元数据的信息,Meta类的字段如下:
- db_table
- ordering 列表或者元组形式
- verbose_name 别名
- verbose_name_plural 别名复数
- abstract 不同步到数据库,只是用于被别的类继承
- permissions 定义权限
- managed 是否按照Django规则管理模型类 默认是True
- unique_together=()/((),()) 对应MySQL中的联合唯一约束
- app_label 指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了)
- db_tablespace 定义数据库表空间的名字
- Django 数据表操作
- 更改数据表
- 删除数据库表步骤
- 删除对应的模型类代码
- 删除migrationd文件夹下面的模型类
- 删除Django的migrations表中对应的记录
- 删除数据库表
- 删除数据库表步骤
- 导入数据
- Django shell 导入数据 引入模型 调用模型对象的save方法
- 自己定义一个脚本批量导入数据
- fixtures Django serialization -> model 保存
- python3 manage.py dumpdata > data.json
- python3 manage.py loaddata data.json
- 通过数据库客户端或则source文件导入数据
- 导出数据
- python3 manage.py dumpdata > data.json
- pycharm 导出
- mysqldump 导出
- 数据操作
- 返回QuerySet 的 API
- all(),filter(),order_by(),exclude(),reverse(),distinct()
- extra(),defer(),only() 实现字段别名,排除一些字段,选择一些字段
- values(),values_list() 获取字典或者元组形式的结果集
- dates(),datetimes() 根据时间日期获取查询集
- union(),intersection(),difference() 并集,交集,差集;MySQL Innodb 只支持并集
- select_related() 一对一、多对一查询优化,prefetch_related() 一对多、多对多查询优化。 反向查询
- annotate() 使用聚合计数,求和,平均数,raw() 执行原生SQL
annotate()对分组后的结果进行统计 - Model.objects.get().子表的表名 _set.all()
- 不返回QuerySet 的 API
- 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk()
- 创建对象 create(),bulk_create(),create_or_update() 创建,批量创建,创建或更新
- 更新对象 update(),update_or_create() 更新,更新或创建
- 删除对象 delete() 使用filter 过滤
- 其它操作 exists(),count(),aggregate() 判断是否存在,统计个数,聚合
aggregate() 是对这个数据表中的数据进行统计
- 自定义聚合查询
- 返回QuerySet 的 API
- F对象和Q对象
- F对象:操作字段的数据
- Q对象:结合 AND , OR ,NOT, | , ~ , & 实现复杂的查询
- 更改数据表
注: 本文知识点是根据自己的项目经验及慕课网的教学视频整理所得,
如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/10223596.html
Django ORM 知识概要的更多相关文章
- django基础知识
一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- django orm总结[转载]
django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...
- Django ORM - 001 - 外键表查询主表信息
开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...
- Django ORM 中的批量操作
Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...
- Django ORM 查询管理器
Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...
- Django 基础知识
Django Models django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql ...
- Django ORM模型的一点体会
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- 数据库表反向生成(二) Django ORM inspectdb
在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...
随机推荐
- [Kubernetes]深入理解StatefulSet
前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...
- TestNg框架基础入门
TestNg框架简介: TestNG,即Testing, Next Generation,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架.TestN ...
- Idea 使用小技巧【取消自动打开项目】
受到我沈誉大大的启发,把每次的项目自动启动上次的项目给关掉,其实不管掉也行,既然这样,那还是关掉吧. ctrl + alt + s 输入 system Settings 然后把Reopen last ...
- OpenCV-Python:Harris角点检测与Shi-Tomasi角点检测
一.Harris角点检测 原理: 角点特性:向任何方向移动变换都很大. Chris_Harris 和 Mike_Stephens 早在 1988 年的文章<A CombinedCorner an ...
- ubuntu apt不使用代理
常见的问题是apt使用代理. 不过今天遇到的情况是,桌面进不去,只能tty:在tty界面下,发现1080端口上开着代理,/etc/environment和~/.bashrc中都确保注释掉了http_p ...
- 【JAVA】反射总结
反射是什么? 反射就是指程序在运行的时候可以知道一个类的自身信息. 自身信息有哪些:类方法.属性.成员变量.构造方法.包等 动态编译和静态编译 静态编译:在编译的时候进确定类型,如果绑定对象成功,n ...
- LOJ#6374 网格
题解: 挺好的一道题 两次容斥+一次二项式反演 首先考虑部分分不存在k的限制 然后我们发现两维之间是互相独立的 下面以x轴为例 然后问题就变成了 $$\sum\limits_{i=1}^{R} {xi ...
- IIS处理并发请求设置
一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态. 当发现请求明显延迟,没有被即时 ...
- day21.模块和包
博客整理来源:http://www.cnblogs.com/Eva-J/articles/7292109.html 模块 1.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文件 ...
- php八种常用函数
八种常用的数学函数: ① abs(x):求绝对值 ② ceil(x),floor(x):向上/下取最接近的整数 ③ cos(x),sin(x),tan(x):三角函数 ④ min(),max( ...