1、特殊查询

  F和Q查询:

      之前的查询都是模型对象的属性与常量值比较,两个属性怎么比较呢?使用F查询。

F查询语法:

from django.db.models import F

F('属性名称')

F查询要求

# 1.查询id大于价格的书籍
# 2.查询价格大于2倍id的书籍
1.查询id大于价格的书籍
    book = Books.objects.all()
book1 = book.filter(id__gt=F("price"))
print(book1)
2.查询价格大于2倍id的书籍
    book = Books.objects.all()
book1 = book.filter(price__gt=F("id")*2)
print(book1)

 3、查询价格大于52,并且author_id小于3的图书

    book = Books.objects.all()
book1 = book.filter(price__gt=52,author_id__lt=3)
print(book1)
book1 = book.filter(price__gt=52).filter(author_id__lt=3)

Q查询

  Q查询语法:

from django.db models import Q

Q(模型属性1_条件运算符=值)|Q(模型属性2_条件运算符=值)

#(~非)
# 1.查询价格大于20,或id小于3的图书
# 2.查询id不等于3的书籍
1.查询价格大于20,或id小于3的图书
    book = Books.objects.all()
book1 = book.filter(Q(price__gt=52)|Q(id__lt=3))
print(book1)
 2.查询id不等于3的书籍(Q对象可以使用~非还有|或)
    book = Books.objects.all()
book1 = book.filter(~Q(id=3))
print(book1)

聚合函数

  使用aggregate()过滤器调用聚合函数,返回特定的对象。聚合函数包括AvgMaxMinSumCount(使用Count时,一般不需要aggregate()过滤器,直接调用即可),聚合函数被定义在django.db.models中。

1、统计总的价格数
    book = Books.objects.all()
price_sum = book.aggregate(Sum("price"))
print(price_sum)

关联查询

    基础关联查询


# 1.查询id为1的作者出版的书籍信息
# 2.查询id为2的书籍的作者信息

1.查询id为1的作者出版的书籍信息
    author = Authors.objects.get(pk=1)
#书籍的外键是作者,因此先查询到pk=1的作者,然后再查书籍
#由于书与作者是多对一,当由一去找多的时候,
# 需要将多的类名小写在加_set在加上全部的
book = author.books_set.all()
print(book)
2.查询id为2的书籍的作者信息
    #先查出pk=2的这本书籍,再去查对应的作者
book = Books.objects.get(pk=2)
#查对应的作者 由于是多对一查找,直接点外键名就可以查出相关信息
auth = book.author
print(auth)

总结:当书籍的外键是作者的时候,

查询规则:

    多查一:(将书本查出来:直接将对象点外键对象就可以查出来)

   一查多:(将作者查出来:直接将作者对象点关联模型类类名小写加_set即可查出)

  内连接查询(inner join)

  语法:

filter(关联模型类类名小写__属性名__运算符=值)
#例:filter(books__name="与时间做朋友")

  需求:

# 1.查询作者为"何帆"的所有书籍信息
# 2.查询作者的书籍中描述包含"时间"的作者
1.查询作者为"何帆"的所有书籍信息
    #1.查询作者为"何帆"的所有书籍信息
#01\第一步我们可以先查书在过滤作者,由于是多找一,直接外键对象名加__属性名=“”
auth = Books.objects.filter(author__name="何帆")
print(auth)
2.查询作者的书籍中描述包含"时间"的作者
    #2.查询作者的书籍中描述包含"时间"的作者
#先查询所有作者,在过滤出来关联书籍包含“时间”的信息
#查询作者过滤书籍出来,是少查多,过滤规则是类模型名小写__属性名__条件名=“时间”
auth = Authors.objects.filter(books__name__contains="时间")
print(auth)

总结关联查询:

    当查询多过滤少的时候filter(外键对象名__属性名__条件=“”)

    当查询少过滤条件是多的时候filter(模型类名小写__属性名__条件=‘’)

05-Django模型(2)的更多相关文章

  1. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

  2. Django模型层Meta内部类详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...

  3. django模型

    用django时,只要用到数据库就得用到模型. 一.数据库的MTV开发模式 从MVC到MTV 所谓软件架构的MVC模式将数据的存取逻辑(Module),表现逻辑(View)和业务逻辑(Controll ...

  4. django模型中的抽象类(abstract)

    首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ...

  5. Django模型之Meta选项详解

    Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...

  6. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  7. python django模型内部类meta详细解释

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.下面对此作一总结: abstract      这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会相应 ...

  8. 第四章:Django 模型 —— 设计系统表

    1. Django框架提供了完善的模型(Model )层来创建和存储数据,每一个模型对应数据库中的唯一的一张表. 2. Django 模型基础知识: .每一本模型是一个Python类,继承了djang ...

  9. Django 模型中自定义Manager和模型方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...

  10. 一 Django模型层简介(一)

    模型 django提供了一个强大的orm(关系映射模型)系统. 模型包含了你要在数据库中创建的字段信息及对数据表的一些操作 使用模型 定义好模型后,要告诉django使用这些模型,你要做的就是在配置文 ...

随机推荐

  1. 表单生成器(Form Builder)之伪造表单数据番外篇——指定范围随机时间

    为了伪造一些尽量真实的假数据,也真是够费劲的.上一篇笔记记录了一下获取一个随机车辆牌照,这篇笔记记录一下怎么获取一个随机时间.这篇就不说那么多废话了,直接上代码 // 获取指定范围的随机数 var g ...

  2. 2019/12/10学习内容摘要(Linux文件和目录管理)

    1.绝对路径和相对路径 *绝对路径:路径的写法一定是由根目录 / 写起的,例如 /usr/local/mysql *相对路径:路径的写法不是由根目录 / 写起的,例如 首先用户进入到 /home,然后 ...

  3. Cocos2d-x的坐标系统

    推荐转至此处阅读<Cocos2d-x的坐标系统> Cocos2d-x的坐标系统 一.坐标系 二.Cocos2d-x的坐标系统 1.类别 2.定义 三.屏幕坐标系 & OpenGL坐 ...

  4. 22(8).模型融合---RegionBoost

    在adaboost当中,样本的权重alpha是固定的,蓝色五角星所在的圈中3个○分错了,红色五角星所在的圈中4个×和1个○都分对了,很容易让人想到,这个模型,对于红色位置的判断更加可信. 动态权重,每 ...

  5. celery配置

    celery配置 celery的官方文档其实相对还是写的很不错的.但是在一些深层次的使用上面却显得杂乱甚至就没有某些方面的介绍, 通过我的一个测试环境的settings.py来说明一些使用celery ...

  6. salt-api 获取服务器信息,minion批量执行cmd命令

    import requests import json try: import cookielib except: import http.cookiejar as cookielib # 使用url ...

  7. angularjs $scope与this的区别,controller as vm有何含义?

     壹 ❀ 引 初学angularjs的同学对于$scope一定不会陌生,scope(作用域)是将view(视图)与model(模板)关联起来的桥梁,通过controller(控制器)对于model的数 ...

  8. UI设计---初来乍到

    2019.12.1   今天学习两节 实现自己既定的目标,必须能耐得住寂寞单干. PS下载 给大家分享一个2019ps教程,提取码:ywnl 或扫描二维码 迅捷思维导图:使用" Enter  ...

  9. SQLServer之数据库表转化为实体类【带注释】

    1.在开发过程中,有时候需要将数据库表转化为实体类.手敲除了不方便,还容易出错.本着DRY+懒人原则,参考了一位老司机的博客[见底部],并在其基础上进行了优化.[原先是不带注释的] DECLARE @ ...

  10. SSM整合1(springMVC+mybatis)

    整合目标:控制层采用springmvc.持久层使用mybatis实现 整合思路: Dao层: 1.SqlMapConfig.xml,空文件即可,但是需要文件头. 2.applicationContex ...