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. C# 数据库访问

    C# 数据库访问 分类: C#学习笔记2011-07-05 11:26 515人阅读 评论(0) 收藏 举报 数据库c#datasettextboxcommandexception   目录(?)[+ ...

  2. common upload乱码

    request.setCheracterEncoding("utf-8"); DiskFileUpload.setHeaderEncoding("utf-8") ...

  3. 使iframe随内容(target到iframe的内容)改变而自适应高度,完美解决各种获取第一个demo高度后第二个高度不变情况

    转自:http://caiceclb.iteye.com/blog/281102 很高兴,终于使用jquery实现了点击外部链接,更改iframe内容时,iframe的高度自适应问题. 失败的测试就不 ...

  4. python pass 的用法

    python pass用法 1.空语句 do nothing 2.保证格式完整 3.保证语义完整 4.以if语句为例: C/C++中写法: if(true) ; // do nothing else ...

  5. 洛谷P2340 奶牛会展

    题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成 ...

  6. 你真的懂SDWebImage?

    SDWebImage已经到了用烂了的地步,对于一名优秀的开发者来说,会用只是最简单的一步,我们要能够研究到其底层的技术实现和设计思路原理.在网上偶然间看到了一篇文章,感觉不错,略作修改,批注,后面的内 ...

  7. PCB 规则引擎之JSON对象查看器

    在PCB规则引擎开发中,JavaScript V8引擎是处理业务逻辑的, 当然业务逻辑需要数据支撑才行,  即需有将数据推进入到V8引擎.目前这边数据传输到JavaScript V8引擎以C# Mod ...

  8. Is the Information Reliable?(差分约束系统)

    http://poj.org/problem?id=2983 题意:给出M条信息,判断这些信息的正确性.(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的 ...

  9. 洛谷P1330 封锁阳光大学(二分图染色)

    P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...

  10. $P5017 摆渡车$

    problem 毒瘤\(DP\) #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; typedef lon ...