oysq

 一、多表操作(一对多)

添加记录:直接赋值创建表记录;通过对象调用属性查询赋值(django特有操作)

# 添加视图
def addbook(requset):
    # 方法一  publish_id=2
    # Book.objects.create(name=\'linux运维\',price=77,pub_date=\'2017-12-12\',publish_id=2)
    #  直接给外键赋值 需要知道外键id对应的信息

    # 方法二  publish=publish_obj
    publish_obj=Publish.objects.filter(name=\'人民出版社\')[0]
    # 取出操作对象
    Book.objects.create(name=\'go\', price=66, pub_date=\'2017-5-12\', publish=publish_obj)
    # 找到人民出版社的id在赋值给publish_id(推荐)

    return HttpResponse(\'添加成功\')

 查询记录:

def select(request):
    # # 一 524 正向查询
    # book_obj=Book.objects.get(name=\'python\')
    # # 取出名为python的一条记录
    # pud_obj=book_obj.publish
    # # 通过python的外键找到从表的记录对象
    # print(pud_obj.name)
    # # 通过记录对象.取出对象属性


    # # 二 524 反向查询
    # pub_obj = Publish.objects.filter(name=\'人民出版社\')[0]
    # # 取出人民出版社对象
    # print(pub_obj.book_set.all().values(\'name\',\'price\'))
    # # 通过人民出版社对象取出所有对应的表筛选名字;没有外键就需要通过(类名_set)


    # 三 524 下划线查找
    ret=Book.objects.filter(publish__name=\'人民出版社\').values(\'name\',\'price\')
    # 表对象筛选(外键对应的名字是人民出版社)的记录 ;显示两个值  ;正向查找通过外键
    print(ret)

    # 应用:找出python 这本书对应的出版社名字    多找一,也可以用一找多
    ret2=Publish.objects.filter(book__name=\'python\').values(\'name\')
    # 方向查找 从表里面没有外键则通过类名
    print(ret2)
    ret3 = Book.objects.filter(name=\'python\').values(\'publish__name\')
    # 在__(双下划线)的使用上values也可以使用;找到name=python的实例;筛选出从表对应的name信息
    print(ret3)

    # 应用:查找北京的出版社出过的所有的书
    ret4 = Publish.objects.filter(city=\'北京\').values(\'book__name\')
    print(ret4)

    return HttpResponse(\'查询成功\')

一对多之反向查找:

  

 

 

 

总体查找方式有两种

  一、正向查找

    1.利用主表实例的外键属性

    2.下划线

  二、反向查找 

    1.利用从表的实例对象. 主表__set 查找主表对应信息

    2.下划线查找

 

 

 查询使用的函数:

表记录的查询(重点):

filter:

过滤器:按照字段具体的某条记录值去查找 (名字=\'ouyang\'、价格=100)

values:
值:按照某个字段查找   (名字、价格)



book_list = Book.objects.filter(id=2)
book_list=Book.objects.exclude(author="yuan").values("name","price")

book_list=Book.objects.all()
book_list = Book.objects.all()[::2]
book_list = Book.objects.all()[::-1]

#first,last,get取到的是一个实例对象,并非一个QuerySet的集合对象
book_list = Book.objects.first()
book_list = Book.objects.last() 
book_list = Book.objects.get(id=2)#只能取出一条记录时才不报错


ret1=Book.objects.filter(author="oldboy").values("name")
ret2=Book.objects.filter(author="yuan").values_list("name","price")

book_list= Book.objects.all().values("name").distinct()
book_count= Book.objects.all().values("name").distinct().count()


模糊查询 双下划线__

book_list=Book.objects.filter(name__icontains="P").values_list("name","price")
book_list=Book.objects.filter(id__gt=5).values_list("name","price")




分类:

技术点:

相关文章: