Django边学边记—模型查询
查询集
- 两大特性
- 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
- 缓存:查询集的结果被存下来之后,再次查询时会使用之前缓存的数据
- 返回列表的过滤器如下:
- all():返回所有数据
- filter():返回满足条件的数据
- exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字
- order_by():排序,默认升序,降序的话在条件前加减号(-)
返回的QuerySet类型可以继续调用查询方法。也就是可以含有零个、一个或多个过滤器。
- 返回单个值的过滤器如下:
- get():返回单个满足条件的对象
- 如果未找到会引发"模型类.DoesNotExist"异常
- 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
- get():返回单个满足条件的对象
- 与sql语句相比,查询集和select语句等价,过滤器像where和limit子句
- aggregate():聚合
- exists():判断查询集中是否有数据,如果有则返回True,没有则返回False
- 查询集 可以像列表一样进行切片。
字段查询
- 在Django的shell中 用__来连接属性名(sql中叫字段)和比较运算符,类似sql语句中的空格
属性名称__比较运算符=值
比如:类名.objects.filter(类属性__isnull=False)
条件运算符主要有:
- __exact:表示判等
- __contains:是否包含
- __startswith、__endswith:以指定值开头或结尾
- __isnull:是否为null
(以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如__iexact、__icontains、__istartswith、__iendswith)
- __in:是否包含在范围内
- __gt、__gte、__lt、__lte:大于、大于等于、小于、小于等于,(不等于使用等于的运算符,使用exclude()过滤器)
- __year、__month、__day、__week_day、__hour、__minute、__second:对日期时间类型的属性进行运算
关联查询
- Django中也能实现类似于join查询,要查那个类中的数据就从那个类来查,写关联条件时如果类中没有关联属性,要写类的名字小写,有关联属性就写关联属性.语法如下:
要查的模型.objects.过滤器(关联模型类名小写[或关联属性]__属性名[__运算符]=值)
F对象
- 对象的属性与属性值比较,从django.db.models导入F对象。语法如下:
from django.db.models import F
F(属性名)
可以在F()对象上使用算数运算
Q对象
from django.db.models import F
Q(属性名__运算符=值)
- 多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字,如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符。(实际上Q对象,在我的理解就是相当于())
- Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或,Q对象前使用~操作符,表示非not
- 从django.db.models导入Q对象。语法如下:
聚合函数
- 使用aggregate()过滤器调用聚合函数,返回一个字典。
- 从django.db.models中导入聚合函数,包括:Avg,Count,Max,Min,Sum
跟聚合相关的还有一个count()函数 返回的是一个数字。
Django边学边记—模型查询的更多相关文章
- Django边学边记—新手Django建项目各流程细节
一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...
- Django边学边记——中间件
特点 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,用于全局修改Django的输入或输出. 每个中间件组件负责做一些特定的功能.中间件全部注册在sett ...
- Django边学边记—静态文件
概念 项目中的CSS.图片.js都是静态文件 一般会将静态文件放到一个单独的目录中,以方便管理 在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径 静 ...
- Django边学边记—模板
功能 产生html,且不仅仅是一个html 包含: 静态内容:html,css,js 动态内容:模板语言 使用 一般使用 Django中提供的简写函数render调用模板 render(request ...
- Django边学边记—视图
一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...
- Django边学边记--状态保持(cookie和session)
Cookie 概念: Cookie,也叫Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票. 特点: Cookie是由服务 ...
- django模型查询操作
一旦创建好了数据模型,Django就会自动为我们提供一个数据库抽象API,允许创建.检索.更新和删除对象操作 下面的示例都是通过下面参考模型来对模型字段进行操作说明: from django.db i ...
- django 数据库配置 ,APP 迁移.模型基础
# 1.数据库的连接配置django 连接mysql的配置流程:- 安装 pymysql pip install pymysql- 创建数据库用户有创建数据库权限的用户- 创建数据库crm .进入数据 ...
- Django:学习笔记(6)——模型
Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...
随机推荐
- 42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架
42岁大龄程序员的迷茫 我真傻,真的.我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有-- 我真傻,真的.我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会 ...
- 解决docker-compose下载过慢
https://blog.csdn.net/baidu_21349635/article/details/104628772
- SQL 练习28
查询平均成绩大于等于 85 的所有学生的学号.姓名和平均成绩 SELECT Student.SId,Student.Sname,平均成绩 FROM Student , (SELECT sid,AVG( ...
- Nebula 2.5.0安装过程及遇到的坑
2021年8月23日,Nebula 发布了最新版本:2.5.0,正好赶上新环境部署,记录一下安装过程及遇到的坑: 一.准备工作 以下安装使用nebula用户,搭建集群模式,一共三台机器:192.168 ...
- 备战秋招之十大排序——O(nlogn)级排序算法
时间复杂度O(nlogn)级排序算法 五.希尔排序 首批将时间复杂度降到 O(n^2) 以下的算法之一.虽然原始的希尔排序最坏时间复杂度仍然是O(n^2),但经过优化的希尔排序可以达到 O(n^{1. ...
- @ImportResource-SpringBoot使用xml配置Bean
前言 SpringBoot推荐使用注解的方式去声明bean,但还是提供了xml的方式去加载bean 一.创建要声明为bean的实体类 WzqEntity.java package com; /** * ...
- C++面试题(四)——智能指针的原理和实现
C++面试题(一).(二)和(三)都搞定的话,恭喜你来到这里,这基本就是c++面试题的最后一波了. 1,你知道智能指针吗?智能指针的原理. 2,常用的智能指针. 3,智能指针的 ...
- C#的生产者和消费者 实例
class Program { //写线程将数据写入myData static int myData = 100; //读写次数 const int readWriteCount = 20; //fa ...
- C程序设计学习笔记(完结)
时间:2015-4-16 09:17 不求甚解,每有会意,欣然忘食.学习的过程是痛苦的 第1章 程序设计和C语言 第2章 算法--程序的灵魂 -算法的五个特点 ...
- MySQL之连接查询和子查询
多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, ... from 表1 {inner|lift|right} join 表2 on 连接条件; ...