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 ...
随机推荐
- Image图片处理
public class Imager { #region 正方型裁剪并缩放 /// <summary> /// 正方型裁剪 /// 以图片中心为轴心,截取正方型,然后等比缩放 /// 用 ...
- git实验室
git clone一个项目 jiqing@jiqing-System-Product-Name:/home/wwwroot/default$ sudo git clone http://106.14. ...
- bzoj 1453 双面棋盘
题目大意: 一个黑白方格图 支持单点修改 查询黑色与白色联通快个数 思路: 可以把每一行压为一个点 使用线段树来维护 然后两行合并的时候使用并查集来合并 #include<iostream> ...
- bzoj2982 combination——卢卡斯定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982 卢卡斯定理裸题: 原准备1A来着,结果输出忘了加回车! 预处理阶乘或者现求都可以,感觉 ...
- codeforce 杀题计划
先尽量做Div 1 A B 想做难题时做C 全天学竞赛时每天至少两道Div2 (算法数据结构没学的先过,题面很长的......也先过 我的英语啊...)
- [Swift通天遁地]九、拔剑吧-(15)搭建具有滑出、视差、3D变形等切换效果的引导页
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Android Studio 常用快捷键(超实用!!!)
快捷键又称为“热键”,多个按键的组合可以实现某些快速操作,例如Window中最常用的Ctrl+C和Ctrl+V,熟练使用快捷键可以大大提高开发效率并可以减少某些错误的发生.Android Studio ...
- C与C艹的内存管理方式
C 内存开辟出的空间一般可以分成:代码段,数据段(初始化的数据段, 为初始化的数据段BSS),堆,栈 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写 数据段:保存初始化的全局变量 ...
- 【转】Linux账号管理之useradd
转自:http://www.jb51.net/article/45848.htm Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然 ...
- RESTful 设计理论
RESTful 设计: 1.协议通信协议:https 2.域名部署在API专用域名下,除非API很简单(https://www.example.com/api)https://api.example. ...