Django数据库查询案例

查询场景举例

from datetime import date

from django.db.models import F, Q, Sum, Max
from django.http import HttpResponse
from django.shortcuts import render

#导入模型类
from .models import BookInfo,HeroInfo
# Create your views here.
def index(request):

#增加数据
    #创建图书名是西游记,发布日期 1980-01-01的记录
    #所有操作与模型类相关
    #方法1 实例化类
    # book=BookInfo()
    # book.btitle='西游记'
    # book.bpub_date= '1980-01-01'
    # book.save()
    # BookInfo.objects.create(
    # btitle='西游记',
    # bpub_date='1980-01-10'
    # )

    #方法二  用object管理器
    # 创建英雄名称是孙悟空的记录
    # HeroInfo.objects.create(
    # hname='孙悟空',
    # hbook_id=5,
    # hcomment='金箍棒'

    # )
    # 修改数据  方法一
    #5 西游记 改为 东游记
    # 先把这条记录查出来
    # book=BookInfo.objects.get(id=5)  #  get 查询出来的是这条记录的对象
    # book.btitle='东游记'
    # book.save()
    # 修改数据  方法二  查找数据的时候同时修改数据
    # HeroInfo.objects.filter(hname='孙悟空').update(hname='孙大圣')

    #删除数据  方法一
    # hero=HeroInfo.objects.get(id=19)
    # hero.delete()
    # 删除数据  方法二
    # HeroInfo.objects.filter(id=17).delete()



    # 查询数据
    # 1查询编号为1的图书
    # book=BookInfo.objects.get(id=1)
    # print(book)
    #
    #查询所有图书
    # book=BookInfo.objects.all()  #这是查询集
    # print(book)

    #查看所有图书的数量
    # count=BookInfo.objects.count()
    # print(count)



    # 过滤查询  在sql中 like  如果前面有%是用不到索引的
    #如果前面是特定的符号,就可以使用
    # 查询书名包含雪山的图书(开头,结尾)
    # book = BookInfo.objects.filter(btitle__startswith='雪山')
    # book = BookInfo.objects.filter(btitle__endswith='雪山')
    # print(book)

    # 查询数据编号为 1,3
    # book=BookInfo.objects.filter(id__in=[1,3,5])
    # print(book)

    # 查询编号大于3的图书
    # book=BookInfo.objects.filter(id__gt=3)
    # print(book)
    # 查询编号大于等于3的图书
    # book=BookInfo.objects.filter(id__gte=3)
    # print(book)


    #查询编号不等于3的图书 exclude :取反

    # book=BookInfo.objects.exclude(id=3)
    # print(book)

    # 查询1980发表的图书
    # book=BookInfo.objects.filter(bpub_date__year='1980')
    # print(book)


    # 查询1980以后发表的图书  data:将其转为时间类型的字符串
    # book = BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))
    # print(book)

    #查询阅读量大于等于评论量的图书  F:是一个方法模块,要导入
    # book=BookInfo.objects.filter(bread__gte=F('bcomment'))
    # print(book)


    #查询阅读量大于两倍评论量的图书
    # book=BookInfo.objects.filter(bread__gte=F('bcomment')*2)
    # print(book)


    # 更新id=1的图书 阅读量其基础上加1  两种方法
    # book=BookInfo.objects.get(id=1)
    # book.bread+=1
    # book.save()
    # book=BookInfo.objects.filter(id=1).update(bread=F('bread')+1)
    # print(book)
    #

    # 查询阅读量大于20并且编号小于3的图书
    # book=BookInfo.objects.filter(bread__gt=20,id__lt=3)
    # print(book)


    # 查询阅读量大于20或者编号小于3的图书,只能用Q对象实现
    # book = BookInfo.objects.filter(Q (bread__gt=20)|Q(id__lt=3))
    # print(book)


    #查询编号不等于3的图书
    # book=BookInfo.objects.exclude(id=3)
    # book=BookInfo.objects.filter(~Q(id=3))
    # print(book)


    #聚合查询 需要用到aggregate
    # 查询所有阅读量的总和
    # book=BookInfo.objects.aggregate(Sum('bread'))
    # print(book)

    #查询最大的评论量
    # book=BookInfo.objects.aggregate(Max('bread'))
    # print(book)

    #查询所有图书.按照阅读量排序,升序(降序)
    # book=BookInfo.objects.all().order_by('bread')  升序排序
    # book=BookInfo.objects.all().order_by('-bread')  降序排序
    # print(book)


    #关联
    #查询书籍编号为1中的所有英雄
    # book=BookInfo.objects.get(id=1)
    #查询从表中和主表的关联数据
    # 用到主表的查询对象.从表的模型类小写_set
    # hero=book.heroinfo_set.all()  #查询关联从表对象
    #如果外键设置了related_name=hero ,那么hero会代替heroinfo_set
    # print(hero)

    #查询书籍名称为雪山飞狐的书籍所有英雄
    # book=BookInfo.objects.get(btitle='雪山飞狐')
    # hero=book.hero.all()
    # print(hero)
    #

    #查询英雄编号为1 的所属图书
    # hero=HeroInfo.objects.get(id=1)
    #从 从表中返回查询 主表数据,就直接用外键对象关联即可
    # book=hero.hbook
    # print(book)
    # print(book.bpub_date)


    #关联过滤查询
    #查询英雄中 有 乔峰 的书籍
    #查询哪个表的书籍就医哪个模型做查询
    # book=BookInfo.objects.filter(hero__hname='乔峰')
    # print(book)


    #查询英雄中包含 郭 的书籍
    # book=BookInfo.objects.filter(hero__hname__contains='郭')
    # print(book)


    #查询书籍阅读量大于 30 的书中的所有英雄
    #hero=HeroInfo.objects.filter(hbook__bread__gt=30)
    #print(hero)
    return HttpResponse('链接成功')

你可能感兴趣的:(基础)