Django进阶Model篇006 - 多表关联查询
接着前面的例子,举例多表查询实例如下:
1.查询作战的所有完整信息。
>>> AuthorDetail.objects.values('sex','email','address','birthday','author__name')
2.查询《持续集成实践》这本书的作者姓名,还有出版社的名字
>>> Book.objects.filter(title='持续集成实践').values('authors__name','publisher__name')
3.查询潘晓明写了一些什么书
>>> Book.objects.filter(authors__name='潘晓明').values('title')
4.查询机械工业出版社都出版了一些什么书籍
>>> Book.objects.filter(publisher__name='机械工业出版社').values('title')
>>> publisher = Publisher.objects.get(name='机械工业出版社')
>>> publisher.book_set.all().values('title')
5.查询机械工业出版社都有哪些作者出过书
>>> Book.objects.filter(publisher__name='机械工业出版社').values('title','authors__name')
多表查询技巧:
__:两个下划线可以生成连接查询,查询关联的字段信息
_set:提供了对象访问相关联表数据的方法。但这种方法只能是相关类访问定义了关系的类(主键类访问外键类)。
ManyToMany
多对多之查询:
正向查询:查询书籍id=1的所有作者
b1=Book.objects.get(id=1)
b1.authors.all()
反向查询:查询id=3的作者所出版的所有书籍
a1=Author.objects.get(id=3)
a1.book_set.all()
正向联表查询:查询书籍id=1的所有作者
Book.objects.filter(id=1).values('authors__name')
反向联表查询:查询id=3的作者所出版的所有书籍
Author.objects.filter(id=3).values('book__title')
多对多添加:
正向添加:
b1=Book.objects.get(id=1)
a1=Author.objects.get(id=2)
b1.authors.add(a1) #可以直接添加obj
b1.authors.add(3) #可以直接添加id au_list=Author.objects.all()
b1.authors.add(*au_list) #可以直接添加obj列表
b1.authors.add(*[1,2,3]) #可以直接添加id列表
反向添加:
a2=Author.objects.get(id=1)
b2=Book.objects.get(id=2)
a2.book_set.add(b2)
a2.book_set.add(3) a2.book_set.add(*Book.objects.all())
a2.book_set.add(*[1,2,3,4])
多对多删除:
多对多的删除有两个参数:
- clear() 清空数据
- remove() 删除数据
正向删除:
# 删除id=1的书籍的所有作者
b1=Book.objects.get(id=1)
b1.authors.clear() # 删除id=2的书籍的作者id=1,2,5
b2=Book.objects.get(id=2)
b2.authors.remove(1)
b2.authors.remove(*[2,5])
反向删除:
# 删除作者id=1的所有书籍
a1=Author.objects.get(id=1)
a1.book_set.clear()

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
Django进阶Model篇006 - 多表关联查询的更多相关文章
- Django进阶Model篇—数据库操作(ORM)
一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...
- Django进阶Model篇007 - 聚集查询和分组查询
接着前面的例子,举例聚集查询和分组查询例子如下: 1.查询人民邮电出版社出了多少本书 >>> Book.objects.filter(publisher__name='人民邮电出版社 ...
- Django进阶Model篇004 - ORM常用操作
一.增加 create和save方法 实例: 1.增加一条作者记录 >>> from hello.models import * >>> Author.object ...
- Django进阶Model篇002 - 模型类的定义
一.创建数据模型. 实例: 作者模型:一个作者有姓名. 作者详情模型:把作者的详情放到详情表,包含性别.email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField ...
- Django进阶Model篇008 - 使用原生sql
注意:使用原生sql的方式主要目的是解决一些很复杂的sql不能用ORM的方式写出的问题. 一.extra:结果集修改器-一种提供额外查询参数的机制 二.执行原始sql并返回模型实例 三.直接执行自定义 ...
- Django进阶Model篇005 - QuerySet常用的API
django.db.models.query.QuerySet QuerySet特点: 1.可迭代 2.可切片 查询相关API 1.get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结 ...
- Django进阶Model篇001 - mysql 数据库的配置
django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...
- Django进阶Model篇003 - 数据库同步技巧
一.认识一个目录 目录名:migrations 作用:用来存放通过makemigrations命令生成的数据库脚本,不熟悉的情况下,里面生成的脚本不要轻易修改.app目录下必须要有migrations ...
- Django基础——Model篇(三)
一 Django ORM中的概念 ORM —— 关系对象映射,是Object Relational Mapping的简写,是用来简化数据库操作的框架 Django ORM遵循Code Frist原则, ...
随机推荐
- pycharm中选择python interpreter
pycharm中选择python interpreter pycharm中有两处地方需要选择python解释器: 一处是调试配置(edit configurations)处,这里选择python解释器 ...
- pandas 修改指定列中所有内容
如下图: 读取出来的 DataFrame “code” 列内容格式为:“浪潮信息(000977.XSHE)” 格式,目标效果是:000977.XSHE 代码: df["code"] ...
- sql server 中having 的使用注意事项
1.having 中不能使用未参与分列的组,having 不能替代where 作用不一样,having是对组进行过滤,where是每条记录进行过滤. 2.having 是对Group By 的条件分组 ...
- Django之查询总结
models.Book.objects.filter(**kwargs): querySet [obj1,obj2]models.Book.objects.filter(**kwargs).value ...
- PAT 天梯赛 L1-035. 情人节 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-035 AC代码 #include <iostream> #include <cstdio&g ...
- The 2018 ACM-ICPC上海大都会赛 J Beautiful Numbers (数位DP)
题意:求小于等于N且能被自己所有位上数之和整除的数的个数. 分析:裸的数位dp.用一个三位数组dp[i][j][k]记录:第i位,之前数位之和为j,对某个mod余数为k的状态下满足条件的个数.这里mo ...
- Kotlin学习记录2
参考我的博客:http://www.isedwardtang.com/2017/09/03/kotlin-primer-2/
- redis 笔记01 简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
文中内容摘自<redis设计与实现> 简单动态字符串 1. Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态 ...
- canvas 事件绑定
Canvas事件绑定 canvas事件绑定 众所周知canvas是位图,在位图里我们可以在里面画各种东西,可以是图片,可以是线条等等.那我们想给canvas里的某一张图片添加一个点击事件该怎么做到 ...
- 如何使用sql函数平均值、总数、最小值、最大值
使用sql函数,您可以在一个select语句的查询当中,直接计算数据库资料的平均值.总数.最小值.最大值.总和.标准差.变异数等统计.使用recordset对象时,也可使用这些sql函数. sql函数 ...