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()过滤器调用聚合函数,返回特定的对象。聚合函数包括Avg,Max,Min,Sum,Count(使用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. 如何在Oracle 12C中添加多个分区 (Doc ID 1482456.1)

    How to Add Multiple Partitions in Oracle 12C (Doc ID 1482456.1) APPLIES TO: Oracle Database - Enterp ...

  2. Linux系统学习 十九、VSFTP服务—虚拟用户访问—为每个虚拟用户建立自己的配置文件,单独定义权限

    为每个虚拟用户建立自己的配置文件,单独定义权限 可以给每个虚拟用户单独建立目录,并建立自己的配置文件.这样方便单独配置权限,并可以单独指定上传目录 1.修改配置文件 vi /etc/vsftpd/vs ...

  3. vscode 启动

    code --user-data-dir /root/vscode code --user-data-dir /root/vscode

  4. 微信小程序的坑(持续更新中)

    参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...

  5. 3种不走寻常路的黑客攻击泄露&如何保护自己?

    数据泄露和黑客攻击现在已经成为我们日常生活中的常见部分,除非您是网络安全专业人员或您的个人数据受到威胁,否则您实际上并不关心是否存在新的漏洞. 正如美国联邦贸易委员会指出的那样,万豪酒店连锁店的超过5 ...

  6. 数据、模型、IT系统认知

    数据.模型.IT系统认知 量化投资定义 量化投资主要是指通过数理模型来实现投资理念,由计算机产生交易策略的一种投资方法. 量化投资是一种方法论,而不是具体的交易策略. 通常与基本面.技术面分析相结合. ...

  7. php中文乱码原因和维修方法

    一.首先是PHP网页的编码 1.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312”),静态页面添加,所有文 ...

  8. C#冒泡算法

    冒泡算法:先看代码吧,我不喜欢先说一大堆,看不懂了再说 class Program { static void Main(string[] args) { , , , , , }; ; i <a ...

  9. java获取当前年份、月份和日期字符串等

    Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...

  10. 案例:使用dbms_xplan.display_cursor无法获取执行计划

    案例:使用dbms_xplan.display_cursor无法获取执行计划 环境:RHEL 6.5 + Oracle 11.2.0.4 在一次测试中发现使用dbms_xplan.display_cu ...