(20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)
基于对象的跨表查询是子查询
基于双下划线的查询是连表查询
PS:基于双下划线的跨表查询 正向按字段,反向按表名小写
一对一
需求:查询lqz这个人的地址
# 正向查询
ret = models.Author.objects.filter(name='lqa').values('author_detail__addr') #Author表作为基表,然后从基表中查到人名,然后从Authonr表跨到author_detail表中获取name对应的addr字段
ret = models.Author.objects.filter(name='lqa').values('name','author_detail__addr') # values里面第一个name的位置可以写基表里面的字段,这样就可以同时打印出查询的内容,比如名字在基表中,地址在另一张表,这样一次可以查出名字和地址 # 反向查询
ret = models.AuthorDetail.objects.filter(author__name='lqz').values('addr','author__name') #基表中没有lqz字段,author__name这样写就等于来到了author, __name就是去author表中的name这个字段对应的值,values后面因为基表中没有name,所以需要author__name,进入author表中获取name字段 需求:查询地址为武汉的人的名字
# 正向查询
ret=models.Author.objects.filter(author_detail__addr='武汉').values('name','author_detail__addr')
# 反向查询
ret = models.AuthorDetail.objects.filter(addr='武汉').values('author__name','addr') #addr在基表中,所以直接写要查询的字段即可,值由于基表中没有name字段,要去关联表查询,这就是反向所以要用表名小写加__字段,如果基表中有的则直接写addr即可
一对多
需求:查询红楼梦这本书的出版社
# 正向查询
ret = models.Book.objects.filter(name='红楼梦').values('publish__addr')
# 反向查询
ret = models.Publish.objects.filter(book__name='红楼梦').values('addr') 需求:查询南京出版社出版的所有书的名字
# 正向 查询
ret=models.Publish.objects.filter(name='南京出版社').values('book__name')
# 反向查询
ret=models.Book.objects.filter(publish__name='南京出版社').values('name')
多对多
需求:查询红楼这本书的所有作者
# 正向查询
ret = models.Book.objects.filter(name='红楼梦').values('author__name')
# 反向查询
ret = models.Author.objects.filter(Book__name='红楼梦').values('name') # 跨多表
需求查询南京出版社出版过的所有书籍的名字以及作者的姓名
ret=models.Publish.objects.filter(name='南京出版社').values('book__name','book__authors__name') #由于作者的姓名在author表中,基表和author表中间还有一张book表,所以在values里面第二个位置写book__authors__name就相当于已经来到了book然后对author表做了跨表查询
(20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)的更多相关文章
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- django orm 基于双下划线的跨表查询
一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...
- python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
- (转)python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
- Django基础(5) ----基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
- Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...
- Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql
0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...
- Django Mysql数据库-基于双下划线的跨表查询
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
- $Django 多对多-自定义第三张表 基于双下划线的跨表查询(补充)
自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.C ...
随机推荐
- PHP7 ci框架session存文件,登录的时候session不能读取
config.php配置 $config['sess_driver'] = 'files';//以文件存储session $config['sess_cookie_name'] = 'ci_sessi ...
- LY.JAVA面向对象编程.形式参数和返回值
2018-07-09 13:29:16 运动员和教练案例 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语 ...
- Spring-data-JPA详细介绍
Spring-data-JPA学习: 1. https://blog.csdn.net/liujianwd/article/details/75411009 2.http://www.cnblogs. ...
- SharePoint Framework 企业向导(五)
博客地址:http://blog.csdn.net/FoxDave SPFx解决方案是如何被构建出来的--很重要 SPFx为SharePoint开发者在设计.编译和部署SharePoint自定义解 ...
- 18-10-18 Python 思维导图 很棒的
赠送 14 张 Python 知识点思维导图 来源 | Python学习联盟 本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库). 按顺序依次展示了以下内容的一系列思维导图: ...
- apache rewrite 规则
啥是虚拟主机呢?就是说把你自己的本地的开发的机子变成一个虚拟域名,比如:你在开发pptv下面的一个项目 127.0.0.1/pptv_trunk,你想把自己的机器域名变成www.pptv.com.那么 ...
- python基础操作以及其常用内置方法
#可变类型: 值变了,但是id没有变,证明没有生成新的值而是在改变原值,原值是可变类型#不可变类型:值变了,id也跟着变,证明是生成了新的值而不是在改变原值,原值是不可变 # x=10# print( ...
- tp5 生成缩略图片
我先说下我的思路,先把正常图片存到服务器,再通过代码将服务器上的大图压缩,生成新的小图替代大图 下面上代码 前台HTML代码 <div class="upload-btn"& ...
- 临时调用call()与apply()方法
当在某个局域范围内要调用构造函数中或者其他局域范围内的方法 此时可以用到临时调用方法call与apply 虽然这两个方法都是起临时调用的功能,但是用法不一样 call(obj,val) obj:对象名 ...
- [转]HBASE 二级索引
1.二级索引的核心思想是什么?2.二级索引由谁来管理?3.在主表中插入某条数据后,hbase如何将索引列写到索引表中去?4.scan查询的时候,coprocessor钩子的作用是什么?5.在split ...