Django

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

关系表的数据操作

在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 关系表的数据操作 表关联对象的访问 多表查询的更多相关文章

  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. cookie domain and cookie path

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie Domain=<domain-value> Opt ...

  2. 【Codeforces 429D】 Tricky Function

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

  3. 解决 EF where<T>(func) 查询的一个性能问题

    前两年帮朋友 做了个网吧管理软件,采用动软的三层架构 sql语句生成的.最近因功能变更 要改动,而我这段正在做asp.net mvc +ef+autofac的一个电商网站.索性 就把原来的底层全重新了 ...

  4. JavaScript(JS)的简单使用

    一.什么是JS(Javascript)? Javascript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加各式各样的功能,为用户提供更加流畅的浏览效果. Javascript严格区分大小 ...

  5. Akka源码分析-深入ActorRef&ActorPath

    上一节我们深入讨论了ActorRef等相关的概念及其关系,但ActorRef和ActorPath的关系还需要再加以分析说明.其实还是官网说的比较清楚. “A path in an actor syst ...

  6. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...

  7. python值函数名的使用以及闭包,迭代器

    一.函数名的运用 函数名就是一个变量名,但它是一个特殊的变量名,是一个后面加括号可以执行函数的变量名. def func(): print("我是一个小小的函数") a = fun ...

  8. C# 文件操作【转】

    本文也收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内 ...

  9. Win10中的睡眠、休眠

    共同点: 都是节能技术. 异同点: 睡眠: 需要耗电.通过键盘鼠标唤醒.唤醒速度快.将用户正在处理的数据保存到内存中,除内存以外的所有设备都停止供电. 休眠: 不需耗电.通过电源键唤醒.唤醒速度慢.将 ...

  10. Android使用的webcview中带有音乐播放控件,在关闭或分享时处于界面不可见状态下,声音仍在播放的问题解决

    一. 问题出现原因         我们在做APP分享时,分享webview加载带有音乐播放控件的网页.当弹出分享界面,webview的网页处于后台状态或关闭该网页时,音乐声仍在播放.出现该类现象使我 ...