Django——8 关系表的数据操作 表关联对象的访问 多表查询
Django
关系表的数据操作
在views中导入modles模型中的,Django7中创建的模型
- from .models import Department, Student, Stu_Detail, Course
先给Department添加数据
- def doo(request):
- # department添加数据
- d1 = Department(d_name='计算机').save()
- Department.objects.get_or_create(d_name='外国语')
- Department.objects.create(d_name='电子')
- d4 = Department(d_name='美术').save()
- return HttpResponse('添加数据成功')
、
一对多的数据添加
Student添加数据
方法一:
- # Student添加数据、方法一:直接添加
- Student.objects.get_or_create(s_name='小明', department_id=1)
- s2 = Student(s_name='小红', department_id=2).save()
方法二:
- # 方法二查找后添加
- d4 = Department.objects.get(d_name='美术')
- s3 = Student(s_name='小美')
- s3.department = d4
- s3.save()
- d3 = Department.objects.get(d_id=3) # 电子
- s3 = Student(s_name='小草')
- s3.department = d3
- s3.save()
- 1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
- 2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问
在学生表和学院表之间进行关联对象的访问
这里我们通过python manage.py shell 来进行
先导入数据模型
通过s1的学院信息
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
查看一个d1学院的所有学生 ()
如果模型I有一个ForeignKey,那么该ForeignKey 所指的模型II实例可以通过一个管理器回前面有ForeignKey的模型I的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称。
主键查看外键用_set.all()
可以在定义时设置related_name 参数来覆盖foo_set 的名称.
添加了related_name的参数后,重新打开一个IDLE,
访问时就能直接用设置的参数作为属性了.
这样使用_set的地方就可以用related_time来替换
现在给Course添加数据
在学生表中再添加一些数据:
现在再来查询一下学院1的所有学生
处理关联对象的方法
- add(obj1, obj2, ...) 添加的已经存在数据库的数据
- 添加一指定的模型对象到关联的对象集中。
注意Course的多对多属性student,现在
使学生1选择了课程1
使学生5选择了课程3
现在把再学院2的王五换到学院3
- create(**kwargs) 添加不存在的数据 ,将数据直接存入数据库
- 创建一个新的对象,将它保存并放在关联的对象集返回新创建的对象。
学院4来了个新同学小雅
remove(obj1, obj2, ...)
- 从关联的对象集中删除指定的模型对象。
- 删除的是关系表中的数据
首先先添加一些数据
clear() 从关联的对象集中删除所有的对象
注意对于所有类型的关联字段,add()、create()、remove()和clear()都会马上更新数据库。换句话说,在关联的任何一端,都不需要再调用save()方法。
多表查询——跨关联关系的查询
Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。
若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
查询学院名字为‘计算机学院’的学生的信息
- # 查询学院名字为‘计算机’的学生的信息
- res = Student.objects.filter(department__d_name='计算机')
查询学生名字中包含 '小' 的学生的学院信息
- # 查询学生名字中包含 '小' 的学生的学院信息
- res = Department.objects.filter(student__s_name__contains='小')
查询学号为1的学生所有的课程
- # 查询学号为1的学生所有的课程
- res = Course.objects.filter(student__s_id=1)
查询报了课程1的所有的学生
- # 查询报了课程1的所有的学生
- res = Student.objects.filter(course__c_id=1)
查询报了'python'课程的的学生的所属学院的信息
- # 查询报了'python'课程的的学生的所属学院的信息
- res = Department.objects.filter(student__course__name='python')
聚合查询
分组查询
F查询
- from django.db.models import Q, F
Q查询
Django——8 关系表的数据操作 表关联对象的访问 多表查询的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django模型基础(三)——关系表的数据操作
模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...
- MySQL表的创建和表中数据操作
这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...
- 【C++】私有数据成员不能用对象去访问吗
首先,必须清楚的是private和public限定的是类而不是对象.因此,在成员函数中访问同类对象的私有成员是完全可以的. 所以,某些教材上所说的“私有数据成员不能用对象去访问”是欠妥当的. 比如,如 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
- django同时查询两张表的数据,合并检索对象返回
原始需求: 1.一篇文章内容分N个版块,每篇文章的版块数量不同. 2.有个文章搜索功能,需要同时搜索标题和内容. 实现思路: 1.由于每篇文章的内容版块数量不同,因此将每个文章的标题和内容分开存入2张 ...
- mysql 库,表,数据操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...
- day54-mysql-库、表、数据操作
. 什么是数据库 存储数据的仓库 . 什么数据: 大家所知道的都是数据.比如:你同学的名字,年龄,性别等等 . 数据库概念 .数据库服务器 .数据库管理系统 重点 .库 .表 .记录 .数据 参考画图 ...
- Django ORM中,如何使用Count来关联对象的子集数量
示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...
随机推荐
- ALSA声卡驱动中的DAPM详解之一:kcontrol
DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【HNOI 2003】 激光炸弹
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1218 [算法] 二维前缀和 [代码] #include<bits/stdc++ ...
- bzoj2142 礼物——扩展卢卡斯定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 前几天学了扩展卢卡斯定理,今天来磕模板! 这道题式子挺好推的(连我都自己推出来了) , ...
- bzoj2841
边双联通分量 具体详解蓝书上十分详细,因为必须是奇数个人坐在一起,那么一个人如果能选上,就必须处在一个简单奇圈中.而奇圈也是一个边双联通分量,所以我们先把边双联通分量都挖出来,然后进行二分图染色. 奇 ...
- sql 语句NVL()用法
一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的 ...
- PCB SQL SERVER 字段模糊匹配个数 实现方法
今天工程系统给到加投加投组件的数据规则修改,遇到需将一个字段模糊匹配的个数统计 这类需求要平时应该很少遇到了,这里将此方法分享出来, 一.需求如下 例子:itempara字段中的内容是: IVH板 铜 ...
- E20170926-mk
validation n. 确认; proposal n. 建议; 提议; 求婚; 〈美〉投标; teaser n. 戏弄者,喜欢戏弄别人的人; 棘手的问题; batch n. 一批; 一 ...
- discuz的cutstr函数
function cutstr($string, $length, $dot = ' ...') { if(strlen($string) <= $length) { return $strin ...
- Akka源码分析-Remote-ActorSystem
前面的文章都是基于local模式分析的,现在我们简要分析一下在remote模式下,ActorSystem的创建过程. final val ProviderClass: String = setup.g ...