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使用这些模型,你要做的就是在配置文 ...
随机推荐
- Unity3D 使用Socket处理数据并将数据 在UGUI、NGUI上显示出来
Unity3d 不支持C#的线程直接调用Unity3D 主线程才能实现的功能.例如:给UGUI text 赋值.改变Color值等.怎样解决这个问题呢?使用一个Loom脚本. 按照惯例贴上代码. 首先 ...
- leetcode题解:整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出 ...
- 【2期】JVM必知必会
JVM之内存结构图文详解 Java8 JVM内存结构变了,永久代到元空间 Java GC垃圾回收机制 不要再问我“Java 垃圾收集器”了 Java虚拟机类加载机制 Java虚拟机类加载器及双亲委派机 ...
- Tensorflow常用算数操作
TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测.如果检测 ...
- Linux平台安装python的psutil包
在Linux平台下,pip install psutil 安装python psutil包,出现下面的错误: psutil/_psutil_common.c:9:20: fatal error: Py ...
- Difference between JDK, JRE and JVM
With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...
- NetCore WebAPI开发探索
一.创建项目 新建api项目: 建好之后,一个默认的控制器已经有了: 运行就可以直接访问get接口获取数据: 二.跨平台部署 部署方面,微软已经完善的很好了,基本上算是傻瓜式操作.项目右键选择发布 ...
- C# HttpClient 请求认证、数据传输笔记
目录 一,授权认证 二,请求类型 三,数据传输 C# HttpClient 请求认证.数据传输笔记 一,授权认证 客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 ...
- Ext.ux.UploadDialog上传大文件 HTTP 错误 413.1 - Request Entity Too Large Web 服务器拒绝为请求提供服务,因为该请求实体过大。Web 服务器无法为请求提供服务,因为它正尝试与客户证书进行协商,但请求实体过大。
问题描述 问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(I ...
- flex下省略号的问题解决
最近在搞微信小程序,发现flex下使用省略号是没有效果的,而且还会打乱预期的结构,查询statckoverflow知道需要在父级设置min-width:0; 但是在我的尝试下,依然不行,原来在上层父级 ...