day056 多表增加和查询
今日总结:
多表的增删改查操作
多表操作
增
book
id title book_detail publish author
onetoone manytoone manytomany
book_obj = models.Book.objects.create(
title='xx',
#book_detail_id = 1,
book_detail = BookDetail(),
)
book_obj.author.add(*[1,2])
删
book_obj = models.Book.objects.filter(id=2)[0]
book_obj.author.clear()
book_obj.author.remove(*[1,2])
book_obj.author.set([1,2])
models.Book.objects.filter(id=2).delete()
改
models.Book.objects.filter(id=2).update(
publish_id = 2,
)
book_obj = models.Book.objects.filter(id=2)[0]
book_obj.author.set([1,2])
查
一对多的基于对象的正反向查询:
查询主键为1的书籍的出版社所在的城市
models.Book.objects.filter(id=1)[0].publish.addr
models.Publish.objects.get(name='18期出版社').book_set.values('title')
一对一的基于对象的正反向查询:
查询一下骚小强的电话
正向
models.Author.objects.get(name='骚小强').au.tel
反向
models.AuthorDetail.objects.get(tel='222').author.name
多对多的基于对象的正反向查询:
水浒传这本书有几个作者参与撰写了
正向:
models.Book.objects.get(title='水浒传').authors.values('name')
反向:
models.Author.objects.get(name='骚小强').book_set.values('title')
一对多的基于双下划线的正反向查询:
查询主键为1的书籍的出版社所在的城市
models.Book.objects.filter(id=1).values('publish__addr')
models.publish.objects.filter(book__id=1).values('addr')
一对一的基于双下划线的正反向查询:
查询一下骚小强的电话
models.Author.objects.filter(name='骚小强').values('au__tel')
models.AuthorDetail.objects.filter(author__name='骚小强').values('tel')
多对多的基于双下划线的正反向查询:
水浒传这本书有几个作者参与撰写了
models.Book.objects.filter(title='水浒传').values('authors__name')
models.Author.objects.filter(book__title='水浒传').values('name')
聚合查询:aggragate()
models.Book.objects.all().aggragate(Avg('price'))
分组: annotate() group by
models.Author.objects.values('id','name').annotate(c=Count('book__id'))
models.Author.objects.filter(Q(age__gt=20)&Q(id__gt=20),name='xxx').annotate(c=Count('book__id')).values('name','c');
1.一对一关系
models.onetoonefield(to=要关联的表名,to_field='关联的字段')
2.一对多关系
models.foreignkey(to='要关联的表名',to_field='要关联的字段')
注意:一对一和一对多关系删除时要注意,设置里foreignkey后,要设置级联删除' on_delete=models.CASCADE '
3.多对多关系
models.manytomanyfield('to'='要关联的表名')
增加:
pub_obj=models.publish.objects.fillter(id=n)[0]
多对一插入数据方式1:
models.book.objects.create(
title='水浒传',
publisher=pub_obj,
)
多对一插入数据方式2:
models.book.objects.create(
title='三国演义',
publish_id=1,
)
一对一插入数据方式:
models.book.objects.create(
...,
...,
)
多对多插入数据方式 : 文字描述(首先你要先找到一个具体的对象,然后用这个对象去点那个你要关联的表名,然后点add()把你要插入的东西插入进去 )
方式一
#首先先找到一个具体的对象
book_obj=models.book.objects.get(id=1)
#
hh_obj=models.book.objects.get(id=xxx)
#添加数据
book_obj.关联的那个表名.add(hh_obj)
方式二
book_obj.表名.add(*[1,2])
book_obj.表名.add(1,2)
一对一
正向查询: 对象.另一个表名.字段名
反向查询: 对象.另一个表名.字段名
一对多
正向查询: 对象.另一个表的表名.字段名
反向查询: 对象.另一个表的表名_set.all().values(id=xx)
多对多
正向查询: 对象.另一个表的表名.all()
反向查询: 对象.另一个表的表秒_set.all()
day056 多表增加和查询的更多相关文章
- 巨蟒python全栈开发django7:多表增加和查询
1.回顾内容&&补充 补充1: 补充2: 这个选择的是第二个解释器. 选择第一个的话,只是针对当前的项目,如果再开新项目的话,需要重新下载安装相关的包. 点击保存,因为我们注释掉了,创 ...
- day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...
- MyBatis 用户表记录数查询
搭建MyBatis开发环境,实现用户表记录数查询 1.在MyEclipse中创建工程,导入MyBatis的jar包
- 在db2中 两个数据库之间的两个表的联合查询
大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...
- 修改表增加字段默认值default
对个生产库的表增加1个字段.字段类型是INT型, 表数据有2千万条, alter table table_name add xxoo number(4) default 0 ; 因此 不仅要修改字典 ...
- Database学习 - mysql 数据库 多表/复合/子 查询
多表查询 多表查询,基本规则,通过两表有关联字段的进行条件匹配查询 内连接查询 方式一: SELECT 查看字段名[,查看字段名] FROM 一表名,二表名 WHERE 一/二表.字段 = 一/二表. ...
- sqlserver为数据库表增加自增字段
需求: 数据库为SQLServer.对已有的数据库表customer加一个序号字段,一次性对所有现存客户加上编号,并在新建客户时自动增加一个编号,数值自增1. 解决方法: 1. 复制表结构.把原 ...
- 在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?
在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办? 解决方法:在SqlServer的企业管理器里增加一个视图吧!!!!!!!!(从来没用过 ...
- MySQL:习题(单表多条件查询二)
Sutdent表的定义 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 学号 INT(10) 是 否 是 是 是 Name 姓名 VARCHAR(20) 否 否 是 否 否 Sex 性 ...
随机推荐
- MySQL学习(七)
学习子查询 1 查出本网站最新的good_id最大的一条商品(要求取出商品名) mysql> select goos_id,goods_name from goods -> order b ...
- 微信小程序不可操作dom节点
//根据历史记录快速搜索 fastSearch:function(e){ console.log(e.currentTarget.id) wx.navigateTo({ url: '../search ...
- Python PyQt5 Pycharm 环境搭建及配置
PyQt5相关安装 python 版本 python 3.6.3 1.安装PyQt5 执行命令: pip install pyqt5 2.安装PyQt5-tools 执行命令:pip install ...
- 记录python接口自动化测试--把测试结果写进excel文件(第九目)
python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...
- PHP里面增加写日志功能
配置项中:
- 七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA
注:这些工具的应用都是受限的,有些本来就是只能用于预测动物,在使用之前务必用ground truth数据来测试一些.我想预测某一个植物的转录本,所以可以拿已经注释得比较好的拟南芥来测试一下.(测试的结 ...
- induced pluripotent stem cell (iPSC) 诱导性多能干细胞
参考: 诱导性多能干细胞 Induced pluripotent stem cell Induced Pluripotent Stem Cells: Problems and Advantages w ...
- Fiddler抓取https数据包
Wireshark和Fiddler的优缺点: ①Wireshark是一种在网络层上工作的抓包工具,不仅自带大量的协议分析器,而且可以通过编写Wireshark插件来识别自定义的协议.虽然Wiresha ...
- CentOS7 下源代码安装php7
安装PHP7: php-7.1.2.tar.gz:下载:wget http://cn2.php.net/get/php-7.1.2.tar.gz/from/this/mirror 安装php: # t ...
- 1.1 从UNIX到Linux的发展历程
MIT的CTSS:第一个分时操作系统 ◼ Multics系统(Multiplexed Information and Computing System) ⚫ 1965年AT&T,MIT和GE的 ...