Django之ORM操作总结
Django之ORM总结
表结构
from django.db import models # 一对多:班级与学生
# 多对多:班级与老师 # Create your models here.
#创建班级表
class Classes(models.Model):
title = models.CharField(max_length=32)
n=models.ManyToManyField('Teachers',related_name="sssss") #创建老师表
class Teachers(models.Model):
name= models.CharField(max_length=32)
age=models.IntegerField(default=30)
gender=models.BooleanField(default=False)
is_married=models.BooleanField(default=True)
address = models.CharField(max_length=50,default='xiaogan')
# #创建第三张关系表
# class C2T(models.Model):
# cid = models.ForeignKey(Classes)
# tid = models.ForeignKey(Teachers) #创建学生表
class Student(models.Model):
username=models.CharField(max_length=32)
age=models.IntegerField()
#只能写true和false
gender=models.BooleanField()
cs=models.ForeignKey(Classes,on_delete=models.DO_NOTHING)
address=models.CharField(max_length=50,default='xiaogan')
单表操作
增加数据的两种方式: 第一种:
Teachers.objects.create(name="root") 第二种:
obj=Teachers(name="root")
obj.save()
删除id为1的表记录
Teachers.objects.filter(id=1).delete()
修改所有数据的姓名为alex
Teachers.objects.all().update(name="alex") 修改id为1的name为alex
Teachers.objects.filter(id=1).update(name="alex")
获取所有的数据
Teachers.objects.all() 获取第一行数据
Teachers.objects.all().first() 获取倒数第一行的数据
Teachers.objects.all().last() 获取id=1的表记录
Teachers.objects.filter(id=1) 获取id=2并且name="root"的表记录
Teachers=.objects.filter(id=2,name="root")
一对多操作
班级
id title
1 2班
2 3班 学生
id username age gender cs_id
1 小明 20 True 1
查看(all()、filter()、values()等)
ret = Student.objects.all() for item in ret:
print(item.id)
print(item.username)
print(item.age)
print(item.gender)
print(item.cs_id)
#这里的cs为对象,
print(item.cs.id)
print(item.cs.name)
注意:cs_id为字段名,cs为对象。
删除: 删除Student表中id为1的记录
Student.objects.filter(id=1).delete() 删除cs_id为1的记录,这里为整个三班的学生
Student.objects.filter(cs_id=1).delete()
或者
Student.objects.filter(cs__name="3班").delete() 注意:这里在filter里面进行跨表操作不是cs.name,而是cs__name。
多对多操作
首先我们要明白:
建立多对多关系可以两张表的随便哪张表都行。
默认在表里是不显示这个字段的。
建立多对多关系默认会创建第三张表,不需要手动创建。
对第三张表的操作还是通过建立多对多关系的对象来操作。
班级:
id title
1 2班
2 3班
3 1班 老师:
id name age gender is_married
1 alex 35 True True
2 Tom 43 Ture True
3 小明 26 True False 老师关系表:
id 班级id 老师id
1 2 1
2 1 1
3 1 2
4 3 3
增加:
obj =Classes.objects.filter(id=1).first()
obj.n.add(3) obj:获取的是2班这个对象
obj.n.add(3):就第三张表中加入一条数据,将班级id为1的班级与老师id为3的老师关联起来,
obj.n.add([4,5]):现在将id为4和5的两位老师关联这个班级
删除:
obj.n.remove(3):解除id为1的班级与id为3的老师的记录 obj.n.remove([4,5]):解除id为1的班级与id为4,5的老师的记录
清空:
obj.n.clean():解除id为1的班级和所有关联老师的记录
重置:
obj.n.set([2,3,5]):先解除所有与obj对象关联的对象,然后重新设置关联
#把三班的所有老师列举出来:
obj =Classes.objects.filter(id=2).first() [id,title]
ret=obj.n.all() ret是一个对象集合,获取另一个表的与id为2的班级关联老师的所有对象
[老师1(id,name...),老师2(id,name...),...] 注意:我们想要获取的不是第三张表(关系表)的数据,想要获取的是关联表的数据。
正向操作
获取每个班级的对象(id,班级名字,任课老师)
v =models.Classes.object.all().values('id','title','n__name') 获取每个班级对象
cls_list=models.Classes.objects.all() for obj in cls_list:
#每个班级id和名字
print(obj.id,obj.title)
#每个班级的所有任课老师
for row in obj.n.all():
print(row.name)
反向操作
获取id为2的老师对象
obj=models.Teachers.objects.filter(id=2).first() 给老师分配一个班级
obj_set.add(2) 另外一种方法:
releated_name="sssss"
obj.sssss.add(2) 注意:
给老师只分配1,2班级,如果有别的关系则删除,如果存在关系则保留,没有关系则创建。
obj.sssss.set([1,2]) 通过第三张表查询关联表的内容
v =models.Teachers.object.all().values('name','sssss_title')
示例:所有学生的姓名以及所在班级名称
stu_list =Student.objects.all() #select * from table;
for student in stu_list:
student.name
student.cs.title [obj,obj,obj,...]
stu_list =Student.objects.all().value("name","cs__title")
stu_list =Student.objects.all().value_list("name","cs__title")
for student in stu_list:
student['name']
student['cs__title']
[("name":零,"title":3班),("name":零,"":)]
找到三班的所有学生:
Student.objects.filter(cs__name="3班")
总结:
ORM通过类来操作数据库表。 一个类对应一张数据库的表。 通过类实例化出来的对象表达表中的一条记录。 类的属性为表中的字段。 其中外键代表关联表中的一行记录(对象)。 外键是一个对象,通过这个对象就可以调用关联表的字段。 注意:filter(),all(),get()等获取的都是一个对象集合,
{对象1{属性1,属性2},对象2{属性1,属性2}....} 对象调用本表内的字段:
对象.本表字段 对象调用外表的字段:
外键名.外表字段 而在filter,get,all,values()中使用
外键名__外表字段
Django之ORM操作总结的更多相关文章
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- Django之ORM操作(聚合 分组、F Q)
Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作. 键的名 ...
- Django之ORM操作(***)
Django之ORM操作(***) http请求的流程: url--> 视图view(模板+数据库) --> ORM的功能: 可以转换SQL语句,并做操作. ORM操作数据表: -创建表: ...
- 【Django】ORM操作#2
目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...
- 【Django】ORM操作#1
目录 一.介绍 概念 由来 优势 劣势 总结 二.Django中的ORM Django项目使用MySQL Model 快速入门 1. AutoField 2. IntegerField 3. Char ...
- django的orm操作优化
django的orm操作优化 models.py from django.db import models class Author(models.Model): name = models.Char ...
- Django中ORM操作
ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...
- Django的ORM操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...
- Django之ORM操作(重要)
Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给 ...
随机推荐
- windows 系统纯净版官网下载地址
http://www.imsdn.cn/operating-systems/windows-7/
- Windows下安装Confluence并破解汉化
注:本文来源于<Windows下安装Confluence并破解汉化> 一.事前准备 1:JDK下载并安装:jdk-6u45-windows-i586.exe 2:MySQL JDBC连接驱 ...
- ORM 对象关系映射
ORM (object relation mapping) 就是将对象数据转换为sql语句并执行 对象关系映射框架 orm 需要做的事情 1 生成创建表的语句 2 插入数据的语句 3 删除数据的语句 ...
- Unity3D料槽设备旋转(一)
1.使用C#创建控制游戏对象的的脚本语言, 第一步: 在project师徒中create 一个C#脚本,将其按照自己的设备名称进行命名,这里我将其简单的命名成zhuaquanzhou.cs 使用编辑器 ...
- C++ Primer 笔记——语句
switch 内部的变量定义 1.因为C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一位置,所以有了如下情况: bool bsuccess = false; switch (b ...
- POJ 1002 487-3279(字典树/map映射)
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 309257 Accepted: 5 ...
- BFC的形成和排版规则
何为bfc? BFC(Block Formatting Context)直译为“块级格式化范围”.是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和 ...
- window.open跳过浏览器拦截
转自https://www.cnblogs.com/shizk/p/8458916.html $('#btn').click(function () { //打开一个不被拦截的新窗口 var newW ...
- RequireJS跨域加载html模版后被转成JS问题分析及解决
问题描述 RequireJS跨域加载HTML模版失败,例如: 在a.com域名下请求CDN域名下的模版,text.js插件会把html文件转成html.js文件去加载,由于并没有生成html.js文件 ...
- jQuery选择器总结 jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法
新年第一编文章 jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement") 选择id值等于myElement的元素,id值 ...