今日总结:

多表的增删改查操作

多表操作

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 多表增加和查询的更多相关文章

  1. 巨蟒python全栈开发django7:多表增加和查询

    1.回顾内容&&补充 补充1: 补充2: 这个选择的是第二个解释器. 选择第一个的话,只是针对当前的项目,如果再开新项目的话,需要重新下载安装相关的包. 点击保存,因为我们注释掉了,创 ...

  2. day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁

    一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...

  3. MyBatis 用户表记录数查询

    搭建MyBatis开发环境,实现用户表记录数查询 1.在MyEclipse中创建工程,导入MyBatis的jar包

  4. 在db2中 两个数据库之间的两个表的联合查询

    大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...

  5. 修改表增加字段默认值default

    对个生产库的表增加1个字段.字段类型是INT型, 表数据有2千万条, alter table table_name add xxoo number(4) default  0 ; 因此 不仅要修改字典 ...

  6. Database学习 - mysql 数据库 多表/复合/子 查询

    多表查询 多表查询,基本规则,通过两表有关联字段的进行条件匹配查询 内连接查询 方式一: SELECT 查看字段名[,查看字段名] FROM 一表名,二表名 WHERE 一/二表.字段 = 一/二表. ...

  7. sqlserver为数据库表增加自增字段

     需求: 数据库为SQLServer.对已有的数据库表customer加一个序号字段,一次性对所有现存客户加上编号,并在新建客户时自动增加一个编号,数值自增1. 解决方法: 1. 复制表结构.把原 ...

  8. 在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?

    在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办? 解决方法:在SqlServer的企业管理器里增加一个视图吧!!!!!!!!(从来没用过 ...

  9. MySQL:习题(单表多条件查询二)

    Sutdent表的定义 字段名 字段描述 数据类型 主键 外键 非空 唯一 自增 Id 学号 INT(10) 是 否 是 是 是 Name 姓名 VARCHAR(20) 否 否 是 否 否 Sex 性 ...

随机推荐

  1. Python Appium 滑动、点击等操作

    Python Appium 滑动.点击等操作 1.手机滑动-swipe # FileName : Tmall_App.py # Author : Adil # DateTime : 2018/3/25 ...

  2. Transcranial magnetic stimulation (TMS)

    Transcranial magnetic stimulation (TMS) Effect of Transcranial Magnetic Stimulation on Free Will Tra ...

  3. Canvas画板

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6QAAAGgCAIAAAAy0z21AAAgAElEQVR4nO3dfYwkZ30n8JqZfcNex8

  4. android------基础面试题

    1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持 ...

  5. Confluence 6 可以自定义的元素

    色彩配色方案允许你对 UI 中的元素色彩进行编辑,包括顶部条,标签页和背景色. 有一些下面的 UI 元素被用在特定的主题中,配色方案的修改可能不会对这些元素有效. 顶部条(Top Bar)—— 顶部导 ...

  6. 原生js实现放大镜

    效果: 1.  鼠标放上去会有半透明遮罩.右边会有大图片局部图 2.  鼠标移动时右边的大图片也会局部移动 放大镜的关键原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置 ...

  7. csu oj 1342: Double

    Description 有一个由M个整数组成的序列,每次从中随机取一个数(序列中每个数被选到的概率是相等的)累加,一共取N次,最后结果能被3整除的概率是多少? Input 输入包含多组数据.     ...

  8. python-项目流程分析及优化查询方法

    项目流程分析: ****** 1. 需求分析 2. 知识点 - 插件 3. 功能分析: - 用户登录 - session - 签名cookie PS: 主动设置超时时间:request.session ...

  9. 克隆linux系统网卡问题

    如果没有 ifcfg-eth0  手动创建 删掉uuid uwaddr 保存退出 然后清空 >/etc/udev/rules.d/70-persistent-net.rules 然后重启 reb ...

  10. Oracle传输表空间介绍

    传输表空间通过拷贝数据文件的方式,实现可跨平台的数据迁移,效率远超expdp/impdp, exp/imp等工具.还可以应用跨平台&数据库版本迁移表数据.归档历史数据和实现表空间级时间点数据恢 ...