ORM多表操作
一对一
外键约束:models . OneToOneField ( to = '外联表类名' , to_field = '外联键名' )
添加数据:操作表类名.objects.create(字段名='字段值',外联键名_id='外键值')
更改数据:操作表类名.objects.filter(id='值').update(操作字段名='值')
删除数据:操作表类名.objects.filter(id='值').delete()
查询
正向查询:对象名 = 操作表类名 . objects . get ( 字段 = '值' )
对象名 . 外联键名_id . 查询字段名
逆向查询:对象名 = 操作表类名 . objects . get ( 字段名 = '值')
对象名 . 查询字段名
查询API
all() 查询所有结果
filter() 它包含了与所给筛选条件相匹配的对象
get() 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误
exclude(**kwargs) 它包含了与所给筛选条件不匹配的对象
order_by(*field) 对查询结果排序
reverse() 对查询结果反向排序
count() 返回数据库中匹配查询(QuerySet)的对象数量
first() 返回第一条数据
last() 返回最后一条数据
exists() 如果QuerySet包含数据,就返回True,否则返回False
values(*field) 返回一个ValueQuerySet 一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
values_list(*field) 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
distinct() 从返回结果中剔除重复记录
一对多
外键约束:字段名use=models.ForeignKey(to='外联表类名' , to_field='外联键名')
# 该字段名用来操作外联关系表
添加数据:操作表类名.objects.create(字段名='值',... ,外联键名_id='外键值')
更改数据:操作表类名.objects.filter(id='值').update(字段名='值')
删除数据:操作表类名.objects.filter(id='值').delete()
查询
正向查询:对象名=操作表类名.objects.get(字段='值')
对象名.属性.属性名称
逆向查询:对象名=操作表类.objects.filter(字段名='值').first()
对象名.联表类名小写_set.all()
多对多
外键约束:models.ManyToManyField(to='外联表名')
添加数据:对象名 = 操作表类名 . objects . create ( 字段名 = '值' )
对象名 . 字段名use . add ( [‘相关联的值’ , ... ] )
更改数据:对象名 = 操作表类名 . objects . filter( 字段名 = '值' ) . first()
对象名 . 字段名use . set ( [ '相关联的值' , ... ] )
删除数据:对象名 = 操作表类名 . objects . filter( 字段名 = '值' ).first()
对象名.字段名use.remove(‘相关联的值’) # 删除指定值
对象名.字段名use.remove(*[ ‘相关联的值’ , ... ]) #删除多个字段
对象名.字段名use.clear() # 清空
查询
正向查询:对象名=操作表类名.objects.filter(字段名='值')
对象名.字段名use.查询字段名 # 全部取出all()
逆向查询:对象名=操作表类名.objects.filter(字段名='值').first()
对象名.关联对象类名小写_set.查询字段名 # 全部取出all()
from django.shortcuts import render,HttpResponse,redirect from app01.models import Publish,Book,Author # Create your views here. def add(request): Book.objects.create(title='goo',publish_id_id=3) return HttpResponse('ok') def update(request): Book.objects.filter(id=3).update(title='12306') return HttpResponse('ok') def delete(request): Book.objects.filter(id=5).delete() return HttpResponse('ok') def inquire(request): book_obj=Book.objects.get(title='python') p_name=book_obj.publish_id.name # 正向一对一查询 p_obj=Publish.objects.get(name='20期') book_id=p_obj.id # 逆向一对一查询 return HttpResponse(p_name) # ------------------------- 一对一 ------------------------------- def add(request): book_obj=Book.objects.create(title='lin',publish_id_id=4) book_obj.bauthor.add(*[1,2]) return HttpResponse('ok') def update(request): book_obj=Book.objects.get(id=16) book_obj.bauthor.set(['1','2']) return HttpResponse('ok') def delete(request): book_obj=Book.objects.get(id=1) # book_obj.bauthor.remove(1) book_obj.bauthor.clear() return HttpResponse('ok') def inquire(request): # book_obj=Book.objects.filter(title='lin').first() # ret=book_obj.bauthor.all() author_obj=Author.objects.get(name='老王(屋内)') ret=author_obj.book_set.all() return HttpResponse(ret) # -------------------- 多对多 ----------------------------