57-多表操作之一对多添加纪录
def add(request):
# pub = Publish.objects.create(name='人民出版社', email='
873245193@qq.com', city='扬州')
# 为book表绑定关系,绑定和publish表的关系
# ------------------方式一和方式二都是绑定一对多的关系
# 方式一
# book_obj = Book.objects.create(title='金瓶', price=100, publishDate="2018-10-05", publish_id=1)
# print(book_obj)
# 方式二 找到实例的对象后直接赋值
# pub_obj = Publish.objects.filter(nid=1).first()
# book_obj = Book.objects.create(title='三体2', price=996, publishDate="2018-10-03", publish=pub_obj)
# print(book_obj.title)
# print(book_obj.publish.name)
# -----------------------------------
# 查询西游记的出版社对应的邮箱
# book_obj = Book.objects.filter(title="西游记").first()
# book_obj_pub = book_obj.publish.email
# print(book_obj_pub)
# +-------------------------------+
# 建立多对多的关系
# book_obj = Book.objects.create(title='暗网', price=100, publishDate="2018-10-06", publish_id=1)
# boy = Author.objects.get(nid=2)
# panda = Author.objects.get(nid=1)
# 多对多关系使用的是many2many的操作的话是不能直接操作表的记录的,必须通过Django的接口去做
# book_obj.authors.add(boy, panda)
# +------其他玩法-------+
# book_obj.authors.add(1, 2, 3) = book_obj.authors.add(*[1, 2, 3])
# 解除多对多的关系(首先必须有多对多的关系)
# book = Book.objects.filter(nid=8).first()
# book.authors.remove(2)
# 清除全部
# book.authors.clear()
return HttpResponse('OK')
58-多表操作之多对多添加纪录
59-基于对象的跨表查询简介
跨表查询比单表查询要多得多,一般表很少有单表,更多的都是多表之间互相关联的关系
ORM中的查询是最复杂也最难实现的地方,需要多注意
60-基于对象跨表查询之一对多
使用什么方式的查询都需要视情况而定,本身是需要灵活应用的
# 1.基于对象查询
# 查询一本书的出版社的名字
# 一对多的正向查询
# book_obj = Book.objects.filter(title="三体2").first()
# print(book_obj.publish.name)
# 一对多的反向查询
# 查询对应出版社的书籍
pub_obj = Publish.objects.filter(name='人民出版社').first()
pub_book_name = pub_obj.book_set.all()
# print(pub_book_name)
for name in pub_book_name:
print(name)
61-基于对象跨表查询之多对多
# 2.多对多的查询的正向查询
# 查询书的作者的名称
# book_obj = Book.objects.filter(title="暗网").first()
# print(book_obj)
# book_obj_author = book_obj.authors.all()
# print(book_obj_author)
# for name in book_obj_author:
# print(name)
# 查找出版过的所有的书籍名称
# author_name = Author.objects.filter(name='panda').first()
# book_list = author_name.book_set.all()
# for book in book_list:
# print(book.title)
62-基于对象跨表查询之一对一
# 一对一的查询
# 查询一个作者的手机号
# author_num = Author.objects.filter(name="panda").first()
# print(author_num.authordetail.telephone)
# ad = AuthorDeatil.objects.filter(telephone=110).first()
# print(ad.author.name)
63-基于对象跨表查询的sql语句
64-基于双下划线的跨表查询之一对多1
65-基于双下划线的跨表查询之一对多2
66-基于双下划线的跨表查询之多对多1
67-基于双下划线的跨表查询之多对多2
68-基于双下划线的跨表查询之一对一
# 2.多对多的查询的正向查询
# 查询书的作者的名称
# book_obj = Book.objects.filter(title="暗网").first()
# print(book_obj)
# book_obj_author = book_obj.authors.all()
# print(book_obj_author)
# for name in book_obj_author:
# print(name)
# 查找出版过的所有的书籍名称
# author_name = Author.objects.filter(name='panda').first()
# book_list = author_name.book_set.all()
# for book in book_list:
# print(book.title)
# +-----------------------------------------------------------+
# 一对一的查询
# 查询一个作者的手机号
# author_num = Author.objects.filter(name="panda").first()
# print(author_num.authordetail.telephone)
# ad = AuthorDeatil.objects.filter(telephone=110).first()
# print(ad.author.name)
# +-----------------------------------------------------------+
# 基于双下滑线的跨表查询(join查询)
# 正向查询按字段,反向查询按表名小写用来告诉orm引擎join哪张表
# book_obj = Book.objects.filter(title="暗网").values("publish__name")
# for k in book_obj:
# print(k['publish__name'])
# 方式2
# ret = Publish.objects.filter(book__title="暗网").values("name")
# for i in ret:
# print(i['name'])
# +-----------------------------------------------------------+
# 多对多查询
# 必须告诉引擎通过什么方式来join表中的字段
# 通过Book表join与其关联的Author表
# ret = Book.objects.filter(title="暗网").values("authors__name")
# print(ret)
# 方式二
# ret = Author.objects.filter(book__title="暗网").values("name")
# print(ret)
# +-----------------------------------------------------------+
# 一对一查询
# ret = Author.objects.filter(name='panda').values('authordetail__telephone')
# print(ret)
# ret = AuthorDeatil.objects.filter(author__name="panda").values("telephone")
# print(ret)
- 路飞学城—Python爬虫实战密训班 第三章
路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...
- 路飞学城—Python爬虫实战密训班 第二章
路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...
- 路飞学城Python爬虫课第一章笔记
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...
- 路飞学城-Python开发集训-第3章
学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...
- 路飞学城-Python开发集训-第1章
学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...
- 路飞学城-Python开发集训-第4章
学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...
- 路飞学城-Python开发集训-第2章
学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...
- 路飞学城-Python开发-第二章
''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...
- 路飞学城-Python开发-第三章
# 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...
- 路飞学城-Python开发-第一章
# 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...
随机推荐
- 【习题 4-9 UVA - 815】Flooded!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 题目很迷啊. 不会出现盆地? 可以理解为一条线. 从左往右高度上升的一座座山. 然后V升的水从最左边的山倒进去. 然后问你最后海拔多 ...
- JavaSE 学习笔记之面向对象(三)
面向对象 特点: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在人们思考习惯的一种思想. 过程和对象在我们的程序中是如何体现的呢?过程 ...
- 修改电脑名称后,Oracle客户端连不上
有以下几个步骤可以尝试,帮助大家缩小错误范围. 1 命令窗口使用sqlplus查看数据库服务是否正常,如下图,没有出现“连接到:”表示数据库服务不正常. 2 在任务管理器中查看数据库的监听是否已经 ...
- 格式化LInux后开机进入grub怎么办
问题:格式化Linux系统盘之后,重启进入grub 1.grub 引导进入windows系统 进入grub grub>rootnoverify (hd0,1) [可以使用Tab键( 比如 roo ...
- 在TOMCAT上手工生成及部署WAR包
以前是用ECLIPSE或是其它IDE自动生成,不明了. 这次手写JAVA,先生成CALSS来部署, 之后用WAR包来部署.(查了资料,好像直接用JAR来部署TOMCAT的WEB项目,不得行) 就上次生 ...
- VS的代码管理工具
参考文章 可以从中知道修改代码段是要打开相关路径下的文档来修改 官方下载地址 百度云盘 如果项目中国有一些代码重复率非常高,可以把这些代码做成snippet代码段,简化成快捷键命令,加速开发
- winform设置超时时间
); //设置超时时间 var completedTask = await Task.WhenAny(new Task(async () => { );//执行的方法示例这里用延迟代替 }), ...
- Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
作者: Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Had ...
- Spring事务管理-<tx:advice>标签
转自:https://www.aliyun.com/jiaocheng/1311989.html 首先先看一下代码: <bean name="transactionManager&qu ...
- js重定向
在现行的网站应用中URL重定向的应用有很多: 404页面处理.网址改变(t.sina转到weibo.com).多个网站地址(如:http://www.google.com/ .www.g.cn )等: ...