05-Django模型(2)
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)的更多相关文章
- 【Python】django模型models的外键关联使用
Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...
- Django模型层Meta内部类详解
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会对应 ...
- django模型
用django时,只要用到数据库就得用到模型. 一.数据库的MTV开发模式 从MVC到MTV 所谓软件架构的MVC模式将数据的存取逻辑(Module),表现逻辑(View)和业务逻辑(Controll ...
- django模型中的抽象类(abstract)
首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ...
- Django模型之Meta选项详解
Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- python django模型内部类meta详细解释
Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.下面对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会相应 ...
- 第四章:Django 模型 —— 设计系统表
1. Django框架提供了完善的模型(Model )层来创建和存储数据,每一个模型对应数据库中的唯一的一张表. 2. Django 模型基础知识: .每一本模型是一个Python类,继承了djang ...
- Django 模型中自定义Manager和模型方法
1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...
- 一 Django模型层简介(一)
模型 django提供了一个强大的orm(关系映射模型)系统. 模型包含了你要在数据库中创建的字段信息及对数据表的一些操作 使用模型 定义好模型后,要告诉django使用这些模型,你要做的就是在配置文 ...
随机推荐
- MySQL常用DDL、DML、DCL语言整理
DDL ----Data Definition Language 数据库定义语言 如 create procedure之类 创建数据库 CREATE DATABASE [IF NOT EXISTS] ...
- java中使用lambda表达式
使用lambda表达式能够使复杂的编写方式变的简单 lambda表达式的语法 (parameters) -> expression 或 (parameters) ->{ statement ...
- 使用cJSON库解析和构建JSON字符串
使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...
- 用深度学习做命名实体识别(二):文本标注工具brat
本篇文章,将带你一步步的安装文本标注工具brat. brat是一个文本标注工具,可以标注实体,事件.关系.属性等,只支持在linux下安装,其使用需要webserver,官方给出的教程使用的是Apac ...
- Selenium(十六):unittest单元测试框架(二) 初识unittest(续)
1. 认识unittest(续) 关于unittest单元测试框架,还有一些问题值得进一步探讨.你可能在前一章的学习过程中产生了一些疑问,也许你会在本节中找到答案. 1.1 用例执行的顺序 用例的执行 ...
- 上传图片到七牛云(服务端 node.js sdk)
大体思路 前端要上传图片到七牛云,需要有一个token进行授权操作,而获取这个上传的upload token(以下简称upToken),在服务端需要一定的身份校验,比如说:只有登录的vip用户才能拿到 ...
- SSM框架之SpringMVC(1)入门程序
SpringMVC(1) 1.三层架构和MVC 1.1. 三层架构 咱们开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序 使用Java语言基本上都是开发B/S架构的程序,B ...
- Eclipse 的快捷键
1. 代码折叠的快捷键,默认是: Ctrl+Shift+Numpad_Divede(小键盘的/号) Ctrl+Shift+Numpad_Multiply(小键盘的*号) 2.删除一行:Ctrl+D 3 ...
- 在vue项目中的js文件里使用vue实例
参考的网址:https://blog.csdn.net/weixin_34353714/article/details/86958742 不为其他,就为了记录一下,方便以后查看: 第一种方法: 1.首 ...
- SQL实用技巧:如何将表中某一列的部分数据合并到一行中
select *,stuff(select ‘,’ + fieldname from table1 for xml path(”)),1,1,”) as field from table2 for ...