转载自 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

  1. 限制查询结果的条数

限制结果的条数,类似于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)转的更多相关文章

  1. django orm总结[转载]

    django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...

  2. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  3. Django ORM 中的批量操作

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  4. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  5. Django ORM模型的一点体会

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

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

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

  7. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  8. django orm 及常用参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  9. Django ORM中,如何使用Count来关联对象的子集数量

    示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...

  10. Django ORM存储datetime 时间误差8小时问题

    今天使用django ORM 将获取到的时间入库,并未出现问题,但是后来发现时间晚了8小时,经查询Django官方文档发现获取本地时间和UTC时间有差别. 首先科普下:UTC是协调世界时 UTC相当于 ...

随机推荐

  1. 谈谈 Vue 模板和 JSX

    工具链 从学习曲线角度来讲,结合我个人体会,React 学习路线是比 Vue 陡峭的,这个和 JSX.Template 有关吗?当然有.在 React 中使用 JSX,众所周知, JSX 需要经过 T ...

  2. 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...

  3. linux操作系统可以ping通ssh连接长时间无响应

    一.问题描述 某集群数据节点服务器频繁无法连接,服务器间出现可ping通但ssh无法连接的情况,使用带外地址登录后远程控制也无法显示正常界面,重启后会短暂恢复. 二.排查问题 重启服务器后检查服务器S ...

  4. 机器学习算法·KNN

    机器学习算法应用·KNN算法 一.问题描述 验证码目前在互联网上非常常见,从学校的教务系统到12306购票系统,充当着防火墙的功能.但是随着OCR技术的发展,验证码暴露出的安全问题越来越严峻.目前对验 ...

  5. Java内存模型与线程(二)线程的实现和线程的调度

    先行先发生原则(happen-before原则) 先行先发生是指Java内存模型中定义的两项操作之间的偏序关系. 如果说A先行于B,其实就是说在发生B操作之前,操作A产生的影响能被操作B观察到,至于这 ...

  6. Head First 设计模式 —— 13. 代理 (Proxy) 模式

    思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...

  7. MySQL的索引优化分析(二)

    一.索引优化 1,单表索引优化 建表 CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO ...

  8. 【Linux】使用 iperf 测试 Linux 服务器带宽

    iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...

  9. SDUST数据结构 - 19级期末考试

    判断题: 选择题: 函数题: 6-1 统计二叉树叶子结点个数: 题目: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typ ...

  10. 使用Adobe Arcobat Pro DC生成PDF提示“PDFMaker文件遗失”新解决思路

    环境: 1.Window 7 2.Adobe Arcobat Pro DC 2020.009.20065 3.Microsoft Office 2007 4.WPS 2019 虽然可以使用插件实现文件 ...