7.models之查询

作者: qy1994 | 来源:发表于2017-10-04 14:46 被阅读0次

django.db.models.query.QuerySet
QuerySet的特点:

  1. 是可迭代的
  2. 可切片

查询相关的API

  • get(**kwargs):返回与所给的筛选条件相匹配的对象,返回的结果有且只有一个,如果符合条件的对象超过一个会抛出app名.models.MultipleObjectsReturned异常,如果没有找到符合条件的查询会抛出 app名.models.DoesNotExist异常---model对象
  • all():会查询所有结果---QuerySet对象
  • filter(**kwargs):它包含那些与所给筛选条件匹配的对象---QuerySet对象
  • exclude(**kwargs):它包含那些与所给筛选条件不匹配的对象---QuerySet对象
  • order_by(*fields):对查询的结果排序(在查询的字段前加-号可按结果的反向排序)
  • reverse():对查询的结果再进行反排序
  • disinct():对查询的结果去重
  • values(*fields):返回一个VaulesQuerySet--一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
  • values_list(*fields):它与vaules()结果相似,不过后者返回的是字典序列,而vaules_list返回的结果是元祖序列
  • count():返回数据库中匹配查询(QuerySet)的对象数量
  • first():返回第一条数据等价于[0]
  • last():返回最后一条数据等价于[-1]
  • exists():是否存在数据(True|False)
  • 更多api在model层的 查询结果集(QuerySet)中的QuerySet method reference(查询结果集api参考)里面

多表联合查询

一:查询id为1的作者的所有信息

#一般用这种方式获取信息,但是不利于获取信息
AuthorDetail.objects.filter(id=1)
# 这种方式可以很好的打印出所有信息,但是作者返回的是id不友好,应该返回姓名比较好
AuthorDetail.objects.filter(id=1).values("id", "sex", "email", "address", "birthday", "author")
# 有主外的可以通过两个下划线接要查询的字段来查询
AuthorDetail.objects.filter(id=1).values("id", "sex", "email", "address", "birthday", "author__name")

二:查询《python实战》这本书的作者姓名和出版社

Book.objects.filter(title="python实战").values("authors__name", "publisher__name")

三:查询jack写过的书,及书籍的出版社信息

Book.objects.filter(authors__name="jack").values("title", "publisher__name")

总结:多表查询的技巧

  • __ : 两个下划线可以生成连接查询(内连接外联接都可以 这里还不懂 ),查询关联的字段信息
  • _set : 提供了对象访问相关表数据的方法。但是这种方法只能是相关类访问定义了关系的类(主键类访问外键类)
书籍类中有一个字段publisher就是引用的出版社类的主键,虽然出版社类中并没有定义书籍有关的信息但是我们还是可以通过_set方法查询到出版社出版的图书----此方法只适用于model对象不适用与QuerySet对象
Publisher.objects.get(name="中国出版社").book_set.all().values("title")

models之聚合查询函数和分组查询函数
在 django.db.models里 使用前需要先导入

  1. annotate(*args, **kwargs):可以为QuerySet中的每个对象添加注解。可以通过计算查询结果中的每个对象所关联的对象集合,从而得出总计值(也可以是平均值等),用于分组查询,annotate前的vaules当作分组条件
  2. aggregate(*args, **kwargs):通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中的每个参数都指定一个包含在字典中的返回值,用于聚合查询

----------使用原生的sql

当业务背景很复杂的时候 orm并不能提供很好的支持这时候就可以使用原生的SQL

  • extra : 结果集修改器,一种提供额外查询参数的机制
  • raw : 执行原始的sql并返回模型实例
  • 直接执行自定义SQL:这种方式完全不依赖model前面两种方式还要依赖于model from django.db import connection

相关文章

  • 7.models之查询

    django.db.models.query.QuerySetQuerySet的特点: 是可迭代的 可切片 查询相...

  • 7.models

    这次的模型继承AbstractUser类,里面自带了一些属性,再新建下边的属性: 其中ImageField功能需要...

  • 黑猴子的家:Kylin 快速入门之Hive 和 Kylin 性能

    1、Hive查询 2、Kylin 查询 1)查询时间 2)数据图表展示以及导出 3)图表展示之条形图 4)图表展示之饼图

  • SQL常用命令书目录

    SQL常用命令之单表查询 SQL常用命令之多表查询 SQL常用命令之模糊查找 SQL常用命令之空值查询 SQL常用...

  • [ElasticSearch]Java API

    [ElasticSearch]Java API 之 词条查询(Term Level Query) 1. 词条查询(...

  • Jmeter接口测试实例之查询接口

    一、Jmeter接口测试实例之查询接口 首先打开Fiddler进行抓包准备 打开查询界面,输入查询条件,点击查询 ...

  • Impala入门(定位 架构)

    参考资料 基于Impala平台打造交互查询系统(选型)Impala查询优化大数据CDH之查询优化Impala内存优...

  • SQL数据查询

    关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询 字数1843阅读1707评论10喜欢115 前言 上一...

  • 日志查询之搜索查询

    搜索与关键字"docker"有关的日志 1.tail -f 日志文件|grep "docker" 2.vi 日志文...

  • CoreData+多线程

    基础知识:Core Data入门 查询语句:[IOS开发]CoreData条件查询之NSPredicate应用_超...

网友评论

    本文标题:7.models之查询

    本文链接:https://www.haomeiwen.com/subject/qnccyxtx.html