Django ORM模型多表操作/查询API

 

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)

# --------------------   多对多   ----------------------------

 

posted @ 2019-05-27 21:25  神秘海螺  阅读(216)  评论(0)    收藏  举报