疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN
定义Model:
from django.db import models
class Moreinfo(models.Model):
weight = models.FloatField()
height = models.FloatField()
class Detail(models.Model):
sex = models.CharField(max_length=20)
age = models.IntegerField()
moreinfo = models.ForeignKey(Moreinfo)
class Usr(models.Model):
name = models.CharField(max_length=20)
money = models.FloatField()
detail = models.ForeignKey(Detail)
class Product(models.Model):
name = models.CharField(max_length=20)
price = models.FloatField()
class Record(models.Model):
buyer = models.ForeignKey(Usr, related_name='+',)
seller = models.ForeignKey(Usr, related_name='+',)
product = models.ForeignKey(Product)
conut = models.IntegerField()
查询语句:
>>> x=Record.objects.filter(Q(seller__detail__age__gt=20)|Q(buyer__detail__age__gt=20))
>>> print(x.query)
SELECT "tt_record"."id", "tt_record"."buyer_id", "tt_record"."seller_id", "tt_record"."product_id", "tt_record"."conut" FROM "tt_record" INNER JOIN "tt_usr" ON ("tt_record"."seller_id" = "tt_usr"."id") INNER JOIN "tt_detail" ON ("tt_usr"."detail_id" = "tt_detail"."id") INNER JOIN "tt_usr" T4 ON ("tt_record"."buyer_id" = T4."id") INNER JOIN "tt_detail" T5 ON (T4."detail_id" = T5."id") WHERE ("tt_detail"."age" > 20 OR T5."age" > 20)
整理如下:
SELECT "tt_record"."id", "tt_record"."buyer_id", "tt_record"."seller_id", "tt_record"."product_id", "tt_record"."conut"
FROM "tt_record"
INNER JOIN "tt_usr" ON ("tt_record"."seller_id" = "tt_usr"."id")
INNER JOIN "tt_detail" ON ("tt_usr"."detail_id" = "tt_detail"."id")
INNER JOIN "tt_usr" T4 ON ("tt_record"."buyer_id" = T4."id")
INNER JOIN "tt_detail" T5 ON (T4."detail_id" = T5."id")
WHERE ("tt_detail"."age" > 20 OR T5."age" > 20)
疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN的更多相关文章
- Django中ORM外键和表的关系(Django编程-4)
外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来 ...
- django模型中有外键关系的表删除相关设置
0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...
- 【Hibernate】无外键多表查询
无外键多表查询时编写hql,直接使用逗号分隔表,where作为联合查询条件进行查询.查询出来的结果可为两种,List<List<Object>>或者List<Map< ...
- oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据
注:本文来源于<oracle查询某张表的外键(最终解决办法)> 一:几个查询表外键的脚本 select b.table_name, b.column_name from user_cons ...
- 主外键多表查询demo
https://www.cnblogs.com/DragonFire/p/6949767.html mySQL练习-主外键多表查询 MySQL练习-主外键多表查询 练习: 1.建立表关系: 请创建如下 ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
- mysql外键与表查询
目录 自增特性 外键 外键关系 外键创建 外键的约束效果 级联更新级联删除 多对多关系 一对一关系 表查询关键字 select与from where筛选 group by分组 练习 关系练习 查询练习 ...
- Django ORM - 001 - 外键表查询主表信息
开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...
- django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段
在django项目的开发过程中,在设计模型时一开始将主键设置成了一个自定义的字段,但是在创建搜索索引时却发现必须要存在一个id的字段,并且为主键(不知道是否是项目一开始就这样配置的原因), 但此时表结 ...
随机推荐
- 03、NetCore2.0下Web应用之搭建最小框架
03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...
- cookie的实现原理
cookie技术通过在请求和响应报文中写入cookie信息来控制客户点的状态 cookie会根据从服务器端发送的响应报文内的一个叫做set-cookie的首部字段信息,通知客户端保存cookie 当下 ...
- h5视频和音频 -2018/04/16
HTML5 规定了一种通过 video 元素来包含视频的标准方法. 当前video元素支持的三种视频格式: (1)Ogg 带有Theora视频编码和Vorbis音频编码的ogg文件 (2)MPEG4带 ...
- JS继承的一些见解
JS继承的一些见解 js在es6之前的继承是五花八门的.而且要在项目中灵活运用面向对象写法也是有点别扭,更多的时候还是觉得面向过程的写法更为简单,效率也高.久而久之对js的继承每隔一段时间就会理解出现 ...
- java之设计模式工厂三兄弟之工厂方法模式
[学习难度:★★☆☆☆,使用频率:★★★★★] 简单工厂模式虽然简单,但存在一个很严重的问题.当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码 ...
- 四,前端---constructor与prototype
这里对于constructor 和 prototype做一个简单的介绍,旨在让大家有一个简单的了解与认识 1:定义与用法 prototype:属性使您有能力向对象添加属性和方法. constructo ...
- 前端面试送命题-JS三座大山
前言 本篇文章比较适合3年以上的前端工作者,JS三座大山分别指:原型与原型链,作用域及闭包,异步和单线程. 原型与原型链 说到原型,就不得不提一下构造函数,首先我们看下面一个简单的例子: functi ...
- [LeetCode] Top K Frequent Words 前K个高频词
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- 使用tkinter加载png,jpg
最近来使用tkinter加载图片时遇到了困难,按照资料写了 photo = PhotoImage(file='ques.png') imglabel = Label(root, image=photo ...
- 机器学习技法:02 Dual Support Vector Machine
Roadmap Motivation of Dual SVM Lagrange Dual SVM Solving Dual SVM Messages behind Dual SVM Summary