Django中模型(五)

Django中模型(五)

六、模型查询

1、概述

查询集,表示从数据库获取的对象集合。

过滤器就是一个函数,基于所给的参数限制查询集结果。查询集可以有多个过滤器。

从sql角度来说,查询集合等价于select语句,过滤器等价于where条件。

2、查询集

A、概述

在管理器上调用过滤器方法返回查询集。查询集经过过滤器方法筛选后返回新的查询集,所以可以写成链式调用。

B、惰式执行

创建查询集不会带来任何数据的访问,直到调用数据时,才会访问数据库

C、直接访问数据库的情况

迭代、序列化、与if合用

D、过滤器

过滤器,返回查询集的方法称为过滤器。

all():返回所有数据

filter():

返回符合条件的数据。

filter(‘键’=‘值’):键是数据表中的字段名,值是条件。返回满足条件的数据

filter(‘键’=‘值’,‘键’=‘值’):返回同时满足两个条件的数据

filter(‘键’=‘值’). filter(‘键’=‘值’):同上

exclude():过滤掉符合条件的数据

order_by(‘字段名’):以某字段排序

values():一条数据就是一个对象(字典类),返回一个列表

E、返回单个数据

get():返回一个满足条件的对象。注意:如果没有找到符合条件的对象,会引发“模型类.DoesNotExist”异常;如果找到多个对象,会引发“模型类.MultipleObjectsReturned”异常。

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

first():返回查询集中的第一个对象

last():返回查询集中的最后一个对象

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

F、限制查询集

查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句。

eg:

studentsList=students.objects.all()[0:5]

注意:下标不能为负数

G、查询集的缓存

每个查询集都包含一个缓存,来最小化的对数据库访问;在新建的查询集中,缓存首次为空,第一次对数据集查询求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存。

F、字段查询

概述:

实现了sql中的where语句,作为方法filter()、exclude()、get()的参数。

语法:

属性名称__比较运算符=值

外键:

属性名_id

转义:

比较运算符:

exact:判断,区分大小写

contains:是否包含,区分大小写

eg:views.py

def studentsearch(request):

studentList=Students.objects.filter(sname_contains=‘孙‘)#查询Student数据表中sname字段值中包含‘孙’的值

    return rander(request,‘news.html‘,{"students":studentList})

startswith(value),endswith(value):以value开头或结尾,区分大小写

eg:views.py

def studentsearch(request):

    studentList=Students.objects.filter(sname_startswith=‘孙‘) #查询Student数据表中sname字段值中以‘孙’开头的值

    return rander(request,‘news.html‘,{"students":studentList})

注意:以上四个在前面加上i,表示不区分大小写。iexact,icontains,istartswith,iendswith。

isnull、isnotnull:

判断是否为空。和以上几个使用方法一致:属性名__isnull=False)

in:

是否在内。

gt:大于

gte:大于等于

lt:小于

lte:小于等于

year:年

month:月

day:天

week_day

minute:分

second:秒

G、查询快捷

PK:代表主键

H、聚合函数

Avg():取平均值

Count():返回数据的个数

Max():返回该字段的最大值

Min():返回该字段的最小值

Sun():返回该字段的和

I:跨关联查询

处理join查询。语法:模型类名__属性名__比较运算符。

eg:返回描述中带有“孙红雷”这三个字的的数据属于哪个班级

grade=Grades.objects.filter(students__scontend__contains=‘孙红雷‘)

Grades:年级数据表,该表中有班级字段

students:学生数据表,该表中有描述字段“scontend”

contains:比较运算符,包含

J、F对象

使用模型A的属性与模型B属性进行比较,实际上是一条数据的两个值进行比较。

F对象支持算数符运算。

eg:views.py     取出女生人数比男生人数多的数据

from django.db.models import F

def grades(request):  

#取出女生人数比男生人数多的数据g=Grades.objects.filter(ggirlnum__gt=F(‘gboynum‘))

#取出女生人数大于男生人数加20后的数据

gb=Grades.objects.filter(ggirlnum__gt=F(‘gboynum‘+20))

    print(g)

    print(g)

Grades:年级数据表

ggirlnum:字段,女生人数

gt:比较运算符,大于

gboynum:字段,男生人数

K、Q对象

进行或查询。

eg:views.py

from django.db.models import Q
def grades(request):
    #取出主键值小于3或sage大于18的所有值

s=Students.objects.filter(Q(PK__lte=3)|Q(sage__gt=18))#
    print(s)

原文地址:https://www.cnblogs.com/xshan/p/8327584.html

时间: 2024-07-31 11:21:51

Django中模型(五)的相关文章

Django中模型(二)

Django中模型(二) 三.定义模型 1.模型.属性.表.字段间的关系: 一个模型类在数据库中对应一张表:在模型类中定义的属性,对应该模型对照表中的字段. 2.定义属性 A.概述 ·django根据属性的类型确定以下信息 ·当前选择的数据库支持字段的类型 ·渲染管理表单时使用的默认html控件 ·在管理站点最低限度的验证 B. ·django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 C.属性命名限制 ·遵循标识

Django中模型(三)

Django中模型(三) 四.模型成员 1.类属性 objects:是Manager类的一个对象,作用是与数据库进行交互. 定义模型类时,没有定义管理器,则默认创建名为objects的管理器. 2.自定义模型管理器 格式:自定义名=models.Manager() 当为模型定义管理器后,Django将不再为模型生成objects模型管理器. 3.自定义管理器Manager类 概述:模型管理器是Django的模型进行与数据库进行交互个接口,一个模型可以有多个管理器. 作用:向管理器类中添加额外的方

django中模型

django需要使用数据库,则需要安装对应的驱动,比如mysql,则需要安装mysqlclient驱动: pip install mysqlclient 在settings.py文件中配置数据库连接信息: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'firstsite', 'HOST': 'localhost', 'USER': 'root', 'PASSWORD': '123456', 'P

django中模型的简单操作

class Person_Tbl(models.Model):     '''     定义人物类     '''     name = models.CharField(max_length=254,default='')                     #姓名     sex =  models.CharField(max_length=125,default='')                       #性别     height = models.IntegerField

解决在django中应用keras模型时出现的ValueError("Tensor %s is not an element of this graph." % obj)问题

用keras训练好模型,再在django初始化加载模型,这个过程没有问题,但是在调用到模型执行model.predict()的时候就报错: raise ValueError("Tensor %s is not an element of this graph." % obj) ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 2), dtype=float32) is not an element of

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

Python笔记(五)--Django中使用模板

使用Django开发网站时,如果不使用模板,那么将会很不合理.因为我们所有的html代码都需要被硬编码到我们的Python代码中.我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码: 1 #coding=UTF-8 2 from django.http.response import HttpResponse, Http404 3 import datetime 4 5 def hours_ahead(request,offset): 6 try: 7 of

Django之五模型

前言 在第三节,我们讲述了用 Django 建造网站的基本途径: 建立视图和 URLConf . 正如我们所阐述的,视图负责处理一些主观逻辑,然后返回响应结果. 作为例子之一,我们的主观逻辑是要计算当前的日期和时间. 在当代 Web 应用中,主观逻辑经常牵涉到与数据库的交互. 数据库驱动网站 在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据. 这个网站也可能会向访问者提供修改数据库数据的方法. 许多复杂的网站都提供了以上两个功能的某种结合. 例如 Amazo

Django框架-模型层

Django框架-模型层 一.单表查询之必知必会13条 1.时间字段中的两个关键性参数 create_time = models.DateField() # 年月日 create_time = models.DateTimeField() # 年月日时分秒 # 两个关键性参数 # auto_now:每次操作数据 都会自动刷新当前操作的时间 # auto_now_add:在创建数据的时候 会自动将创建时间记录下来 后续的修改不会影响该字段 2.搭建测试环境 在django中,你可以写一个单独测试某