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 ('', '', '[email protected]', '北京XX', '1988-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '[email protected]', '广州XX', '1987-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '[email protected]', '上海XX', '1986-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '[email protected]', '广州XX', '1985-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '[email protected]', '杭州XX', '1984-01-02', '');
INSERT INTO `hello_authordetail` VALUES ('', '', '[email protected]', '广西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()

Django进阶Model篇005 - QuerySet常用的API-LMLPHP

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***

05-02 06:55