ORM多表操作
Posted chouchoudedahuilang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM多表操作相关的知识,希望对你有一定的参考价值。
from django.db import models class Classes(models.Model): """ 班级表,男 """ titile = models.CharField(max_length=32) m = models.ManyToManyField(‘Teachers‘,related_name=‘sssss‘) class Teachers(models.Model): """ 老师表,女 """ name = models.CharField (max_length=32) class Student(models.Model): """ 学生表 """ username = models.CharField(max_length=32) age = models.IntegerField() gender = models.BooleanField() cs = models.ForeignKey(Classes,related_name=‘ssss‘) # cs,cs_id 1 3班 ######################## 单表 ######################## # 增加 # Teachers.objects.create(name=‘root‘) #或者: # obj = Teachers(name=‘root‘) # obj.save() # 查 # Teachers.objects.all() # Teachers.objects.filter(id=1) # Teachers.objects.filter(id=1,name=‘root‘) # result = Teachers.objects.filter(id__gt=1) # [obj(id,name),] # result = Teachers.objects.filter(id__gt=1).first() # 删除 # Teachers.objects.filter(id=1).delete() # 改 # Teachers.objects.all().update(name=‘alex‘) # Teachers.objects.filter(id=1).update(name=‘alex‘) ######################## 一对多 ######################## """ 班级: id name 1 3班 2 6班 学生 id username age gender cs_id 1 成成 18 男 1 2 小芳 22 女 2 3 王杰 25 男 1 """ # 增加 # Student.objects.create(username=‘成成‘,age=18,gender=‘男‘,cs_id=1) # Student.objects.create(username=‘小芳‘,age=18,gender=‘女‘,cs= Classes.objects.filter(id=1).first() ) # 查看 """ ret = Student.objects.all() # [] # [ obj(..),] # [ obj(1 成成 18 男 1),obj(2 小芳 22 女 2),obj(3 王杰 25 男 1),] for item in ret: print(item.id) print(item.username) print(item.age) print(item.gender) print(item.cs_id) print(item.cs.id) print(item.cs.name) """ # 删除 # Student.objects.filter(id=1).delete() # Student.objects.filter(cs_id=1).delete() # cid = input(‘请输入班级ID‘) # Student.objects.filter(cs_id=cid).delete() # cname = input(‘请输入班级名称‘) # Student.objects.filter(cs_id=cid).delete() # Student.objects.filter(cs__name=cname).delete() ##如果写filter跨表的时候不能用. 只能用__ ######################## 多对多 ######################## # 多对多 """ 班级: id title 1 3班 2 4班 3 5班 老师: id title 1 王老师 2 陈老师 3 李老师 4 赵老师 老师班级关系表(类): id 班级id 老师id 1 1 2 2 1 3 #3 1 4 4 2 2 5 2 3 6 2 4 7 1 5 # 增 obj = Classes.objects.filter(id=1).first() #1 3班 obj.m.add(2) ##老师id=2 obj.m.add([4,3]) # obj = Classes.objects.filter(id=2).first() #1 3班 # obj.m.add(2) # obj.m.add([4,3]) obj = Classes.objects.filter(id=1).first() #1 3班 # 删除 # obj.m.remove([4,3]) # 清空 obj.m.clear() # 重置 obj.m.set([2,3,5]) ##不存在的新建 # 查第三张表 # 把3班的所有老师列举 obj = Classes.objects.filter(id=1).frist() obj.id obj.titile ret = obj.m.all() # 第三张表 # ret是一个 [ 老师1(id,name),obj(id,name) ] """
from django.shortcuts import render from django.shortcuts import HttpResponse from app01 import models def test(request): # models.Classes.objects.create(titile=‘2班‘) # models.Classes.objects.create(titile=‘3班‘) # models.Classes.objects.create(titile=‘4班‘) # # models.Student.objects.create(username=‘王成‘,age=24,gender=True,cs_id=1) # models.Student.objects.create(username=‘王杰‘, age=22, gender=True, cs_id=1) # models.Student.objects.create(username=‘王忠‘,age=18,gender=True,cs_id=1) # models.Student.objects.create(username=‘王浩‘,age=33,gender=True,cs_id=2) # ret = models.Student.objects.filter(cs__titile=‘2班‘) # print(ret) # obj = models.Classes.objects.filter(titile=‘2班‘).first() # print(obj.id) # print(obj.titile) ####反向查找 反向:小写类名_set(默认) ==> related_name=‘ssss‘ ##print(obj.student_set.all()) # print(obj.ssss.all()) # ret = models.Classes.objects.all().values(‘id‘, ‘titile‘,‘ssss‘,"ssss__username") # print(ret) # # 注意谁是主表 # models.Student.objects.all().values(‘username‘, ‘cs__titile‘) ##学生为主表 # models.Classes.objects.all().values(‘titile‘, ‘ssss__username‘) ##班级为主表 # #################### 多对多 #################### # models.Teachers.objects.create(name=‘王老师‘) # models.Teachers.objects.create(name=‘陈老师‘) # models.Teachers.objects.create(name=‘李老师‘) # models.Teachers.objects.create(name=‘赵老师‘) # cls_list = models.Classes.objects.all() ##找出所有班级obj.id obj.title obj.m.all() # for obj in cls_list: # print(obj.id,obj.titile) # for row in obj.m.all(): # print(‘----‘,row.name) # obj = models.Classes.objects.filter(id=1).first() # obj.m.add(3) ##给id=1的班级新增一个老师 # obj = models.Teachers.objects.filter(id=2).first() # obj.sssss.set([1,2]) ##给id=2的老师重置id=1,2的班级 # obj.sssss.remove(3) ##删除 # v = models.Classes.objects.all().values(‘id‘,‘titile‘,‘m‘,‘m__name‘) # print(v) # v = models.Classes.objects.all().values(‘id‘,‘titile‘,‘m‘,‘m__name‘) ##字典 # print(v) # for item in v: # print(item[‘m‘],type(item[‘m‘])) # v = models.Teachers.objects.all().values(‘name‘,‘sssss__titile‘) # print(v) return HttpResponse(‘...‘)
以上是关于ORM多表操作的主要内容,如果未能解决你的问题,请参考以下文章