ORM 一对多
一对多查询
通过class类(多类)查询对应的班名获得对应的对象 再通过对象的关联属性的名字可以获得对象的学校名
school = classInof.objects.filter(name='一中1班')
for i in school:
print(i.sch.name)
当Queryset对象只有一个元素时
school = classInof.objects.filter(name='一中1班').first() #first()获得列表的第一个元素
print(school.sch.name)
一对多增加
在school类(一类)创建对象同时级联创建对应的class类(多类)
school = schoolInof.objects.create(name='第四中学')
obj = classInof.objects.create(name='四中1班',sch=school)
一对多删除
通过class类中的关联属性sch来删除信息
classInof.objects.filter(sch__name='第四中学').delete() #删除class类中sch名字是第四中学的信息
一对多修改
通过class类中的关联属性sch来修改信息
classInof.objects.filter(sch__name='第四中学').update(name='五中1班') #更改class类中sch名字是第四中学的信息的名字为五中1班
ORM 多对多
多对多在数据库中会创建第三张表来关联两个表 通过关联属性来跨表操作,其中有三种方式add() 增加信息 remove() 删除一条信息 clear() 删除所有信息
多对多查询
obj = classInof.objects.filter(name='一中1班').first()
for i in obj.user.all(): #该user是关联属性
print(i.user,i.passwd)
多对多增加
obj = classInof.objects.filter(name='一中1班').first()
user_obj = UserInof.objects.create(user='六六',passwd = '123456')
obj.user.add(user_obj.id) #add(id) id是新增用户的id
在第三个表间增加用户和班级的关系
obj = classInof.objects.filter(name='二中1班').first()
user_obj = UserInof.objects.filter(user='张三')
obj.user.add(*user_obj) #add(*参数) 也可以增加关系
多对多删除
在第三个表间删除用户和班级的关系
obj = classInof.objects.filter(name='二中1班').first()
user_obj = UserInof.objects.filter(user='张三')
obj.user.remove(*user_obj)
多对多修改
在第三个表间修改用户和班级的关系
obj = classInof.objects.filter(name='一中1班').first()
user_obj = UserInof.objects.filter(user='六六')
obj.user.clear() #清除第三个表中一中1班的信息
obj.user.add(*user_obj) #在第三个表中添加六六和一中1班关联的信息
反向查询
当从有关系属性的表中查询另一个时,为正向查询。反向查询则反之。
格式:
没关联属性对象名.有关联属性类名小写_set.all()
user_obj = UserInof.objects.filter(user='张三').first()
#对象名.类名小写_set.all() 可以反向查询信息
for i in user_obj.classinof_set.all():
print(i.name)
反向增加
在第三个表中反向增加用户和班级关系
user_obj = UserInof.objects.filter(user='张三').first()
claa_obj = classInof.objects.filter(name='二中1班')
user_obj.classinof_set.add(*claa_obj)
反向删除
在第三个表中反向删除用户和班级关系
user_obj = UserInof.objects.filter(user='张三').first()
claa_obj = classInof.objects.filter(name='二中1班')
user_obj.classinof_set.remove(*claa_obj)