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. Python语法速查: 12. 文件与输入输出

    返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 ...

  2. Win10锁屏壁纸位置

    C:\Users\MIS\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalStat ...

  3. 【模板】分治 FFT

    Link Solution 有两种解法. 法1: 直接上分治FFT,也就是CDQ分治+FFT. 具体做法是先递归左半边,算出左半边答案之后,将左半边贡献到右半边,然后递归右半边. 分治是一个log的, ...

  4. 图解SynchronousQueue原理-公平模式

    SynchronousQueue原理详解-公平模式 一.介绍 SynchronousQueue是一个双栈双队列算法,无空间的队列或栈,任何一个对SynchronousQueue写需要等到一个对Sync ...

  5. jQuery 源码解析(二十二) DOM操作模块 复制元素 详解

    本节说一下DOM操作模块里的复制元素子模块,该模块可以复制一个DOM节点,并且可选择的设置是否复制其数据缓存对象(包含事件信息)和是否深度复制(子孙节点等),API如下: $.clone(elem, ...

  6. 【LeetCode】11. 盛最多水的容器

    题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...

  7. MySql-8.0.16-winx64 安装

    参考文章: https://www.cnblogs.com/lxlin/p/9635350.html https://www.cnblogs.com/xc1234/p/9050149.html MyS ...

  8. 在python函数中默认参数的一些坑

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...

  9. Initialize a Property After Creating an Object 创建对象后初始化属性 (XPO)

    In this lesson, you will learn how to set the default value for a particular property of a business ...

  10. 24.Firewalld防火墙

    1.Firewalld防火墙的概述 RHEL/CentOS 7系统中集成了多款防火墙管理工具,其中firewalld是默认的防火墙配置管理工具它拥有基于CLI(命令行界面)和基于GUI(图形用户界面) ...