2018-11-28djenv表的查

2018-11-28  本文已影响0人  叶叶阿姨
模型查询
模型成员objects

Django默认通过模型的objects对象实现模型数据查询

过滤器

查询集表示从数据库获取的对象集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询的结果
从SQL角度来说,查询集合和select语句等价,过滤器就像where条件

Django有两种过滤器用于筛选记录

filter    : 返回符合筛选条件的数据集

exclude   : 返回不符合筛选条件的数据集

多个filter和exclude可以连接在一起查询

当然还有如下这些过滤器:

查询单个数据

filter(条件): 查询满足条件的信息

exclude(条件): 过滤掉满足条件的信息 排除查询 查询到不满足条件的

get():返回一个满足条件的对象。如果没有返回符合条件的对象,会应该模型类DoesNotExist异常,如果找到多个,会引发模型类MultiObjectsReturned异常

first():返回查询集中的第一个对象-->获取结果中的第一个

last():返回查询集中的最后一个对象-->获取结果中的最后一个

count():返回当前查询集中的对象个数

exists():判断查询集中是否有数据,如果有数据返回True,没有返回False

order_by():排序 - :降序 升序就不写

values():获取对象的值

模糊查询

想让大小写不敏感就在前面加个i
contains --> 大小写敏感
icontains --> 大小写不敏感

__contains='小':名字是否包含小,大小写敏感--->类似like '%小%' -->只要有小的

__endswith='小':类似于like '%小' -->最后一个字是小的

__startswith='小':类似于like '小%' -->第一个字是小的

大于小于查询

大于:__gt大于等于:get
小于:__lt小于等于:lte

范围: in
主键: pk

聚合函数

agregate()函数返回聚合函数的值

Avg:平均值

Count:数量

Max:最大

Min:最小

Sum:求和

F对象/Q对象

F对象:可以使用模型的A属性与B属性进行比较

背景:在模型中有两个字段,分别表示学生成绩A与成绩B,要对成绩AB进行比较计算,就需要使用到F对象。

例如有如下例子1:

F对象支持算数运算

grades = Grade.objects.filter(girlnum__gt=F('boynum') + 10)

例子2:

Q对象:

Q()对象就是为了将过滤条件组合起来

当我们在查询的条件中需要组合条件时(例如两个条件“且”或者“或”)时。我们可以使用Q()查询对象

使用符号&或者|将多个Q()对象组合起来传递给filter(),exclude(),get()等函数

Q()对象的前面使用字符“~”来代表意义“非”

模型一对一

定义一对一: OneToOneField()

class A:
    b1 =  OneToOneField(B)

class B():
    name = CharField()

正向查询,已知A对象a,查询B对象: a.b1

反向查询,已知B对象b,查询A对象: b.a

上一篇下一篇

猜你喜欢

热点阅读