zoukankan      html  css  js  c++  java
  • 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)
    
    # --------------------   多对多   ----------------------------
  • 相关阅读:
    ssh环境的搭建,基于注解和配置文件使用
    myeclipse db browser 新建数据源
    区别jquery对象和dom对象及转换方法
    C++中map容器的说明和使用技巧
    csh shell 语法 例子
    如何选择显示器
    Vim简明教程【CoolShell】
    perl
    perlretut
    ssh 配置详解
  • 原文地址:https://www.cnblogs.com/lttlpp61007188/p/10932506.html
Copyright © 2011-2022 走看看