Django

  1. 关系表中的数据操作
  2. 表关联对象的访问
    1. 关联对象的add方法
    2. create方法
    3. remove方法
    4. clear方法
  3. 多表查询
  4. 查询补充
    1. 聚合查询
    2. 分组查询
    3. F查询
    4. Q查询

关系表的数据操作

在views中导入modles模型中的,Django7中创建的模型

  1. from .models import Department, Student, Stu_Detail, Course

先给Department添加数据

  1. def doo(request):
  2. # department添加数据
  3. d1 = Department(d_name='计算机').save()
  4. Department.objects.get_or_create(d_name='外国语')
  5. Department.objects.create(d_name='电子')
  6. d4 = Department(d_name='美术').save()
  7.  
  8. return HttpResponse('添加数据成功')

一对多的数据添加

Student添加数据

方法一:

  1. # Student添加数据、方法一:直接添加
  2. Student.objects.get_or_create(s_name='小明', department_id=1)
  3. s2 = Student(s_name='小红', department_id=2).save()

方法二:

  1. # 方法二查找后添加
  2. d4 = Department.objects.get(d_name='美术')
  3. s3 = Student(s_name='小美')
  4. s3.department = d4
  5. s3.save()
  6. d3 = Department.objects.get(d_id=3) # 电子
  7. s3 = Student(s_name='小草')
  8. s3.department = d3
  9. 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。

若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:

查询学院名字为‘计算机学院’的学生的信息

  1. # 查询学院名字为‘计算机’的学生的信息
  2. res = Student.objects.filter(department__d_name='计算机')

查询学生名字中包含 '小' 的学生的学院信息

  1. # 查询学生名字中包含 '小' 的学生的学院信息
  2. res = Department.objects.filter(student__s_name__contains='小')

查询学号为1的学生所有的课程

  1. # 查询学号为1的学生所有的课程
  2. res = Course.objects.filter(student__s_id=1)

查询报了课程1的所有的学生

  1. # 查询报了课程1的所有的学生
  2. res = Student.objects.filter(course__c_id=1)

查询报了'python'课程的的学生的所属学院的信息

  1. # 查询报了'python'课程的的学生的所属学院的信息
  2. res = Department.objects.filter(student__course__name='python')

聚合查询

分组查询

F查询

  1. from django.db.models import Q, F

Q查询

Django——8 关系表的数据操作 表关联对象的访问 多表查询的更多相关文章

  1. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  2. Django模型基础(三)——关系表的数据操作

    模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...

  3. MySQL表的创建和表中数据操作

    这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...

  4. 【C++】私有数据成员不能用对象去访问吗

    首先,必须清楚的是private和public限定的是类而不是对象.因此,在成员函数中访问同类对象的私有成员是完全可以的. 所以,某些教材上所说的“私有数据成员不能用对象去访问”是欠妥当的. 比如,如 ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...

  6. django同时查询两张表的数据,合并检索对象返回

    原始需求: 1.一篇文章内容分N个版块,每篇文章的版块数量不同. 2.有个文章搜索功能,需要同时搜索标题和内容. 实现思路: 1.由于每篇文章的内容版块数量不同,因此将每个文章的标题和内容分开存入2张 ...

  7. mysql 库,表,数据操作

    一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...

  8. day54-mysql-库、表、数据操作

    . 什么是数据库 存储数据的仓库 . 什么数据: 大家所知道的都是数据.比如:你同学的名字,年龄,性别等等 . 数据库概念 .数据库服务器 .数据库管理系统 重点 .库 .表 .记录 .数据 参考画图 ...

  9. Django ORM中,如何使用Count来关联对象的子集数量

    示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...

随机推荐

  1. ALSA声卡驱动中的DAPM详解之一:kcontrol

    DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态 ...

  2. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  3. 【HNOI 2003】 激光炸弹

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1218 [算法] 二维前缀和 [代码] #include<bits/stdc++ ...

  4. bzoj2142 礼物——扩展卢卡斯定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142 前几天学了扩展卢卡斯定理,今天来磕模板! 这道题式子挺好推的(连我都自己推出来了) , ...

  5. bzoj2841

    边双联通分量 具体详解蓝书上十分详细,因为必须是奇数个人坐在一起,那么一个人如果能选上,就必须处在一个简单奇圈中.而奇圈也是一个边双联通分量,所以我们先把边双联通分量都挖出来,然后进行二分图染色. 奇 ...

  6. sql 语句NVL()用法

    一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的 ...

  7. PCB SQL SERVER 字段模糊匹配个数 实现方法

    今天工程系统给到加投加投组件的数据规则修改,遇到需将一个字段模糊匹配的个数统计 这类需求要平时应该很少遇到了,这里将此方法分享出来, 一.需求如下 例子:itempara字段中的内容是: IVH板 铜 ...

  8. E20170926-mk

    validation   n. 确认; proposal n. 建议; 提议; 求婚; 〈美〉投标; teaser   n. 戏弄者,喜欢戏弄别人的人; 棘手的问题; batch   n. 一批; 一 ...

  9. discuz的cutstr函数

    function cutstr($string, $length, $dot = ' ...') { if(strlen($string) <= $length) { return $strin ...

  10. Akka源码分析-Remote-ActorSystem

    前面的文章都是基于local模式分析的,现在我们简要分析一下在remote模式下,ActorSystem的创建过程. final val ProviderClass: String = setup.g ...