Django(orm)转
转载自 https://www.jianshu.com/p/d92ecd3644f7?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=qq
where语句,和过滤相关的方法或函数如下:
all() : 返回所有的数据,得到的是一个列表
filter() :返回复合条件的数据,条件可以有多个,多个条件用 ',' 隔开,得到的结果也是一个列表
exclude() :过滤掉符合条件的数据,返回一个列表
order_by() : 按照指定字段进行排序
values() : 每条数据都作为一个字典,放在一个列表中
get() : 也可以接受多个条件,与 filter 不同,这里返回的是一个满足条件的对象,为单个值,且如果没有符合条件的就会报MultiObjectReturned错误,而 filter 不会报错,而是返回一个空列表。
first():返回查询结果中的第一个对象
last():返回查询结果中的最后一个对象
count():返回当前查询结果中的对象个数
exists():判断查询结果中是否有数据,如果有数据返回True,没有返回False
- 限制查询结果的条数
限制结果的条数,类似于SQL中的limit和offset。在ORM中则是使用下标的方式去限制,这里有点类似于 python 中列表的下标运算,只是这里的下标不能为负数。
如:模型名.objects.all()[0:5]
4)ORM中的模糊查询
startswith : 匹配开始字符串
endswith : 匹配结束字符串
contains : 匹配包含该字符串的项
示例:
查询姓王的数据
stus = Student.objects.filter(stu_name__startswith='王')
查询以什么结束的数据:
stus = Student.objects.filter(stu_name__endswith='胖')
查询姓名中包含大的数据
stus = Student.objects.filter(stu_name__contains='大')
5)ORM中的比较运算符
isnull,isnotnull:是否为空。
如:filter(stu_name__isnull=True)in:是否包含在范围内。这个类似python中的in
如:filter(id__in=[1,2,3])gt,gte,lt,lte:大于,大于等于,小于,小于等于。
如:filter(age__gt=10)pk:代表主键,也就是id。
6)聚合函数
与SQL中的聚合函数一样,只是ORM中药通过ggregate()函数获得聚合函数的返回值。
Avg:求平均值
Count:求次数
Max:求最大值
Min:求最小值
Sum:求和
例如: Student.objects.aggregate(Max('age'))
7)F对象和Q对象
导入F对象和Q对象: from django.db.models import F, Q
- F对象:使用在模型的A属性与B属性进行比较的时候,比如要比较一个学生的A成绩和B成绩的时候就需要用到F对象。
例如:查找语文成绩比数学成绩至少高10分的学生:
stus = Student.objects.filter(stu_yuwen__gte=F('stu_shuxue') + 10)
- Q对象:是为了将过滤条件组合起来查询,在查询的条件中需要组合条件 “且(&)” 或者 “或( | )” 时。我们需要使用Q()查询对象。
例如:查询学生姓名不叫王大锤的,或者语文成绩大于80分的学生
stus = Student.objects.filter(~Q(stu_name='王大锤') | Q(stu_yuwen__gt=80))
注意:Q()对象的前面使用字符“~”来代表意义“非”
模型字段定义
库
定义属性时,需要字段类型,字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中,所以在定义属性时要导入库,并通过models去定义属性。
导入库:APP目录下的models.py文件中
from django.db import models
定义属性:
class Student(models.Model):
stu_name = models.CharField(max_length=10)
属性命名规则
遵循标识符规则(不使用python预定义的标识符号,内置函数名,异常等。避免使用下划线等)
由于django的查询方式,不允许使用连续的下划线
字段类型
AutoField() : 一个根据实际ID自动增长的IntegerField,通常不指定如果不指定,一个主键字段将自动添加到模型中.
CharField(max_length=字符长度,....) : 字符串,默认的表单样式是 TextInput.
TextField() : 大文本字段,一般超过4000使用,默认的表单控件是Textarea.
IntegerField() : 整数
DecimalField(max_digits=None, decimal_places=None) : 使用python的Decimal实例表示的十进制浮点数, max_digits 指定总位数,decimal_places 指定小数点后保留几位。
FloatField() : 用Python的float实例来表示的浮点数.
BooleanField() : true/false 字段,此字段的默认表单控制是CheckboxInput.
NullBooleanField() : 支持null、true、false三种值.
DateField([auto_now=False, auto_now_add=False]) : 使用Python的datetime.date实例表示的日期 auto_now 每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。 auto_now_add 当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false.
说明:该字段默认对应的表单控件是一个TextInput. 在管理员站点添加了一个JavaScript写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的invalid_date错误消息键。
注意:auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。
TimeField() : 使用Python的datetime.time实例表示的时间,参数同DateField.
DateTimeField() : 使用Python的datetime.datetime实例表示的日期和时间,参数同DateField.
FileField() : 一个上传文件的字段.
ImageField : 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image.
字段选项
概述
通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定.
null : 如果为True,则该字段在数据库中是空数据,默认值是 False
blank : 如果为True,则该字段允许为空白,默认值是 False
注意: null 是数据库范畴的概念,blank 是表单验证证范畴的
db_column : 字段的名称,如果未指定,则使用属性的名称
db_index : 若值为 True, 则在表中会为此字段创建索引
default : 默认值
primary_key : 若为 True, 则该字段会成为模型的主键字段
django会为表增加自动增长的主键列(ID),每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列。
- unique : 如果为 True, 这个字段在表中必须有唯一值
补充
逻辑删除
对公司来说最重要的就是数据,删除数据的操作都是不可恢复的。所以在实际开发可能会对不需要的书进行删除,这种情况我们通常都是对数据做逻辑删除,不做物理删除,防止删除数据后,某些时候又需要该数据不能找回。那么什么是逻辑删除呢?逻辑删除就是在数据表中创建一个字段,这个字段通常是BooleanField,用True表示该数据有效,用False表示该数据无效被删除了。
作者:扯扯_2c79
链接:https://www.jianshu.com/p/d92ecd3644f7
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Django(orm)转的更多相关文章
- 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 ORM模型的一点体会
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- 数据库表反向生成(二) Django ORM inspectdb
在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...
- Django ORM那些相关操作
一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 官网文档 常用的操作 <1> all() ...
- django orm 及常用参数
一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...
- Django ORM中,如何使用Count来关联对象的子集数量
示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...
- Django ORM存储datetime 时间误差8小时问题
今天使用django ORM 将获取到的时间入库,并未出现问题,但是后来发现时间晚了8小时,经查询Django官方文档发现获取本地时间和UTC时间有差别. 首先科普下:UTC是协调世界时 UTC相当于 ...
随机推荐
- [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]
[简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...
- MySQL查询区分大小写敏感问题
由于mysql是不区分大小写的,所以当你查询的时候,例如数据库里有条数据用户名为UpYou(用户名唯一),当你输入:upyou时发现也可以查询,在某些需求下这样是不允许的,可以在查询语句中加入bina ...
- [学习笔记]Golang--基础数据类型
1,不同类型的变量不能互相赋值或者操作,如var a int8 = 16var b int = 23c := a + b 会报错,且int虽然默认32位,但和int32是不同的类型 iota只在声明枚 ...
- 解析SwiftUI布局细节(二)循环轮播+复杂布局
前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...
- sa-token v1.9.0 版本已发布,带来激动人心新特性:同端互斥登录
sa-token是什么? sa-token是一个JavaWeb轻量级权限认证框架, 官网首页:http://sa-token.dev33.cn/ 如果你经常使用腾讯QQ,就会发现它的登录有如下特点:它 ...
- Solon rpc 1.2.18 发布,突出Rpc特性
Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:Rpc. ...
- OpenWRT19.07_命令行_重拨wan_重启路由
OpenWRT19.07_命令行_重拨wan_重启路由 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-19. 写OpenWRT的脚本时,需要用到一些重启命令 以下的命令中的参 ...
- python 中的sum( )函数 与 numpy中的 sum( )的区别
一. python sum函数 描述: sum() 对序列进行求和 用法: sum(iterable[, start]) iterable:可迭代对象,例如,列表,元组,集合. start:指定相加的 ...
- 避坑 | Java8使用并行流(ParallelStream)注意事项
示例分析 /** * 避坑 | Java8使用并行流(ParallelStream)注意事项 * * @author WH.L * @date 2020/12/26 17:14 */ public c ...
- 微信扫码支付Native方式二以及支付回调
官方API文档https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 1.使用jar包 1 <!--微信支付 --> 2 ...