Django基础(五)----关系字段、聚合、分组查询、F和Q查询

ORM常用操作

DateField 日期字段:
格式YYYY-MM-DD

修改数据库表格名称:
class Meta():
db_table = ‘person’

表格:
在这里插入图片描述
模型类:
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第1张图片

  1. 必会12条

<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条
件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs):它包含了与所给筛选条件不匹配的对象
<5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不
是一系列model的实例化对象,而是一个可迭代的字典序列
<6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返
回的是一个字典序列
<7> order_by(*field): 对查询结果排序
<8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet
上调用(在model类的Meta中指定ordering或调用order_by()方法)。
<9> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<10> first(): 返回第一条记录
<11> last(): 返回最后一条记录
<12> exists(): 如果QuerySet包含数据,就返回True,否则返回False

  1. 返回对象方法
    get()、first()、last()

  2. 返回QuerySet对象方法
    all()、filter()、exclude()、order_by()、reverse()、
    values() 返回一个可迭代的字典序列。
    values_list() 返回一个可迭代的元祖序列。

  3. 返回Boolean值方法
    exists()

  4. 返回数字的方法
    count()

双下划线方法

模型类和表格同<常用操作中的模型类和表格>

  1. xx__lt : 小于
    例如:id__lt =2,获取 id小于2的所有记录
    Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第2张图片
    扩展: xx_lte = 2 小于等于2

  2. xx_gt : 大于
    Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第3张图片
    扩展:
    (1).xx_gte=30 大于等于30
    (2).查找大于等于20 小于等于30的所有记录。
    在这里插入图片描述

  3. xx_in: 包含某些值
    例如获取年龄是11,32的记录
    Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第4张图片
    扩展:不包含
    在这里插入图片描述

  4. xx_contains(): 包含某个字符的记录
    在这里插入图片描述
    扩展: xx_icontains() 忽略大小写
    在这里插入图片描述

  5. xx_range(): 查找范围
    查找年龄在20 至 30之间的所有记录
    在这里插入图片描述

  6. xx_startswith : 获取 以 xx开头的记录
    在这里插入图片描述

  7. endswith : 获取以xx结尾的记录
    在这里插入图片描述

  8. date类型字段可以根据年月日进行过滤
    在这里插入图片描述

关系字段

Foreignkey 一对多外键字段
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多’中’多’的一方。
例如:一个出版社可以对应多本书,一本书只能由一个出版社出版。
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第5张图片字段: ForeignKey
字段参数:
to : 设置要关联的表。
to_field : 设置要关联的表的字段。 默认关联的是表的id。
如果想关联其他字段名称可以使用此字段。
on_delete: 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE :删除关联数据,与之关联也删除。
models.DO_NOTHING:删除关联数据,引发错误IntegrityError。
models.PROTECT: 删除关联数据,引发错误ProtectedError。

正向查询和反向查询:
注意:
1.正向查询是指从有外键的一方查找另外一方。
2.反向查询是指从没有外键的一方查找有外键的一方。
3.不管是正向还是反向进行对象查找的时候获取的是对象而不是QuerySet集合。
4.正向查询语法:
obj.外键字段(关联字段) -->> 获取对象。
obj.外键字段(关联字段).字段–>> 获取对象对应的字段值。
5.反向查询语法:
obj.表名_set.xxx
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第6张图片Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第7张图片关系设置:
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第8张图片
ManyToManyField 多对多字段
用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系。
字段: ManyToManyField
字段参数to: 设置要关联的表
注意: 正向查询和反向查询同一对多规则。

例如:作者和图书是多对多的关系
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第9张图片Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第10张图片关系设置
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第11张图片Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第12张图片OneToOneField 一对一字段
一对一的关联关系多用在当一张表的不同字段查询频次差距过大的情况下,将本可以存储在一张表的字段拆开放置在两张表中,然后将两张表建立一对一的关联关系。
字段:OneToOneField
字段参数
to:设置要关联的表。
to_field:设置要关联的字段。
on_delete: 同ForeignKey字段。
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第13张图片

聚合、分组查询

聚合查询
聚合就是指mysql中的 Avg、Sum、Max、… 聚合函数
aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。
键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第14张图片用到的内置函数:
from django.db.models import Avg, Sum, Max, Min, Count
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第15张图片分组查询
分组查询指 mysql中的 group by … having
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第16张图片Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第17张图片Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第18张图片

F和Q查询

F查询
我们使用的过滤器只是将字段值与某个常量做比较、
如果我们要对两个字段的值做比较那该怎么做呢?

Django提供F()来做这样的比较,F()的实例可以在查询中引用字段来比较同一个model实例中的两个不同字段的值。

Django支持F()对象和常数之间的加减乘除取模操作。
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第19张图片
Q查询
filter()等方法中的关键字参数查询都是一起进行’and’的操作,如果需要执行更复杂的查询(例如OR语句),我们可以使用Q对象。
Q对象和 |(或)、&(与)、()(括号)、~(非) 进行联合使用。
注意: Q对象和关键字混合使用的时候,关键字需要写在最后。
Django基础(五)----关系字段、聚合、分组查询、F和Q查询_第20张图片

你可能感兴趣的:(Django)