Django进阶Model篇005 - QuerySet常用的API
django.db.models.query.QuerySet
QuerySet特点:
1、可迭代
2、可切片
查询相关API
1、get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结果有且只有一个。如果符合筛选条件的对象超过一个,就会抛出MultipleObjectsReturned异常,如果没有找到符合筛选条件的对象,就会抛出DoesNotExist异常。
2、all():查询所有结果的对象集。
3、filter(**kwargs):它包含了与所给的筛选条件相匹配的对象集。
4、exclude(**kwargs):它包含哪些与所给筛选条件不匹配的对象集。
5、order_by(*fields):对查询结果排序
6、reverse():对查询结果反向排序
7、distinct():对返回结果剔除重复记录
8、values(*fields):返回一个ValuesQuerySet,一个特殊的QuerySet,运行后得到的并不是一系列的model的实例化对象,而是一个可迭代的字典序列。
9、values_list(*fields):它与values()非常相似,只不过后者返回的结果是字典序列,而values_list()返回的是元祖序列。
10、count():返回数据库中匹配查询QuerySet的对象数量
11、first():返回第一条记录,等价于[:1][0]
12、last():返回最后一条记录,等价于[::-1][0]
13、exists():如果QuerySet包含有数量,就返回True否则就返回False。
...
更多详见:https://docs.djangoproject.com/en/1.10/ref/models/querysets/
实例:
初始化数据:
INSERT INTO `hello_author` VALUES ('', '叶良辰');
INSERT INTO `hello_author` VALUES ('', '潘晓明');
INSERT INTO `hello_author` VALUES ('', '陈吉');
INSERT INTO `hello_author` VALUES ('', '张晓菲');
INSERT INTO `hello_author` VALUES ('', '兰洋');
INSERT INTO `hello_author` VALUES ('', '温银福');
INSERT INTO `hello_author` VALUES ('', '何月顺');
INSERT INTO `hello_author` VALUES ('', '黄文高');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '北京XX', '1988-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '广州XX', '1987-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '上海XX', '1986-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '广州XX', '1985-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '杭州XX', '1984-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '333@qq.com', '广西XX', '1983-01-02', '');
INSERT INTO `hello_publisher` VALUES ('', '电子工业出版社', '北京朝阳区', '北京', '北京', '中国', 'http://www.phei.com.cn');
INSERT INTO `hello_publisher` VALUES ('', '机械工业出版社', '广州天河区', '广州', '广东', '中国', 'http://www.hzbook.com');
INSERT INTO `hello_publisher` VALUES ('', '人民邮电出版社', '广州番禺区', '广州', '广东', '中国', 'http://ptpress.com.cn');
INSERT INTO `hello_book` VALUES ('', '锋利的jQuery', '2017-03-01', '10.00', '');
INSERT INTO `hello_book` VALUES ('', '移动App测试实战', '2016-08-01', '25.00', '');
INSERT INTO `hello_book` VALUES ('', '持续集成实践', '2015-10-14', '50.00', '');
INSERT INTO `hello_book` VALUES ('', '深入性能测试', '2017-03-02', '100.00', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
INSERT INTO `hello_book_authors` VALUES ('', '', '');
初始化SQL
1、查询id为1的书籍信息,并只显示书籍名称和出版日期;
>>> Book.objects.filter(id=1).values('title','publication_date')
>>> Book.objects.filter(id=1).values_list('title','publication_date')
2、查询所有出版社信息,并按id降序排列,并尝试使用reverse方法进行反向排序;
>>> Publisher.objects.order_by('-id')
>>> Publisher.objects.order_by('id').reverse()
3、查询出版社所在的城市信息,城市信息不要重复;
>>> Publisher.objects.all().values('city').distinct()
4、查询城市是北京的出版社,尝试使用exclude方法
>>> Publisher.objects.filter(city='北京')
5、查询男作者的数量
>>> AuthorDetail.objects.filter(sex=0).count()

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
Django进阶Model篇005 - QuerySet常用的API的更多相关文章
- Django进阶Model篇004 - ORM常用操作
一.增加 create和save方法 实例: 1.增加一条作者记录 >>> from hello.models import * >>> Author.object ...
- Django进阶Model篇—数据库操作(ORM)
一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...
- Django进阶Model篇007 - 聚集查询和分组查询
接着前面的例子,举例聚集查询和分组查询例子如下: 1.查询人民邮电出版社出了多少本书 >>> Book.objects.filter(publisher__name='人民邮电出版社 ...
- Django进阶Model篇002 - 模型类的定义
一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...
- Django进阶Model篇008 - 使用原生sql
注意:使用原生sql的方式主要目的是解决一些很复杂的sql不能用ORM的方式写出的问题. 一.extra:结果集修改器-一种提供额外查询参数的机制 二.执行原始sql并返回模型实例 三.直接执行自定义 ...
- Django进阶Model篇001 - mysql 数据库的配置
django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...
- Django进阶Model篇006 - 多表关联查询
接着前面的例子,举例多表查询实例如下: 1.查询作战的所有完整信息. >>> AuthorDetail.objects.values('sex','email','address', ...
- Django进阶Model篇003 - 数据库同步技巧
一.认识一个目录 目录名:migrations 作用:用来存放通过makemigrations命令生成的数据库脚本,不熟悉的情况下,里面生成的脚本不要轻易修改.app目录下必须要有migrations ...
- 第二篇、JavaScript常用的API
下面是我整理的一些JavaScript常用的API清单. 目录 元素查找 class操作 节点操作 属性操作 内容操作 css操作 位置大小 事件 DOM加载完毕 绑定上下文 去除空格 Ajax JS ...
随机推荐
- epoll浅析以及nio中的Selector
出处: https://my.oschina.net/hosee/blog/730598 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference) ...
- 面试题15:链表中倒数第K个结点
输入一个链表,输出该链表中倒数第k个结点. 方法1: 这个解法要循环两次链表 /* public class ListNode { int val; ListNode next = null; Lis ...
- 洛谷P4475 巧克力王国
洛谷P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的. 但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为 ...
- django博客项目8:文章详情页
首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...
- oracle入门(1)——安装oracle 11g x64 for windows
[本文简介] 最近因为一个项目的需要,从零学习起了oracle,现在把学到的东西记录分享一下. 首先是安装篇,在win8 装10G 一直失败,网上各种方法都试过了,最后不得不放弃,选择了11G. 11 ...
- sql server自动化运维脚本
数据库运维中盛传一个小段子,我误删除了数据库,改怎么办?有备份还原备份,没有备份就准备简历!听起来有趣但发生在谁身上,谁都笑不起来.接触了很多的客户发现90%客户的运维策略都不是很完善.本篇就分享一些 ...
- Android Studio设置行宽、格式化断行
设置基于Android studio 1.2,其它版本可能位置不大一样,可以直接搜索 1.设置行宽 就是那条右标准线的位置:Setting-->Editor-->Code Style,右侧 ...
- Java基础—数组(转载)
Java 语言中提供的数组是用来存储固定大小的同类型元素.其实数组就是一个容器. 创建数组 Java 中声明数组的语法有两种: dataType[] arrayRefVar; // 首选的方法 dat ...
- MB11 生鲜项目原料消耗发货功能
*&---------------------------------------------------------------------* *& 程序名: ZDQFI_925 * ...
- JS连等赋值的坑
cnblogs标题: JS连等赋值的坑 关于JS连等赋值有个经典的笔试题: var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); ...