django基础之day05,F与Q查询,Q查询的高级用法


 #F与Q查询
    #***************************  F 查询 ********************
    #   F 查询数据库中的其他字段!!!
    #1.查询库存数大于卖出数的书籍
    from django.db.models import F
    res=models.Books.objects.filter(kucun__gt=F('maichu')).values('title')
    print(res)
    #结果:<QuerySet [{'title': '西游记2'}]>


    #2.将所有书的价格上涨100块
    from django.db.models import F
    res=models.Books.objects.all().update(price=F('price')+100)
    print(res)
    #结果,价格在原来的基础上都增加了100块


    #3.将所有书的名称后面全部加上“爆款”后缀,了解知识点
    # 操作字符串数据需要借助于concat方法
    from django.db.models.functions import Concat
    from django.db.models import F
    from django.db.models import Value
    res=models.Books.objects.update(title=Concat(F('title'),Value('新款')))
    print(res)
    #结果:书的名字上都加上了后缀


    #4.按照表中的字段分组
    res=models.Publish.objects.values('想要分组的字段名').annotate(min_price=Min('book__price'))
    print(res)



    #***************************  Q 查询 ********************

    from django.db.models import Q
    # Q 查询中 | 管道符就是代表或者的关系
    # Q 查询中 ~ 波浪线就是代表not的关系
    #1.查询一下书籍名称是张三丰或者库存数是500的书
    res=models.Books.objects.filter(Q(title='张三丰')|Q(kucun=500))
    print(res)
    #结果:<QuerySet [<Books: 张三丰>, <Books: 吝啬鬼>]>

    res = models.Books.objects.filter(~Q(title='张三丰') | Q(kucun=500))
    print(res)
    #结果:<QuerySet [<Books: 吝啬鬼>, <Books: 西游记>, <Books: 西游记2>]>


    #*************** Q 对象高级用法,通过字符串就能查询出数据 **************
    from django.db.models import Q
    #查询书籍名称是张三丰或者库存数量大于500的书籍
    q=Q()
    q.connector='or'    #默认是and,此处修改为了 or
    q.children.append(('title','张三丰'))
    q.children.append(('kucun__gt',500))
    res=models.Books.objects.filter(q)
    print(res)
    #结果:<QuerySet [<Books: 张三丰>, <Books: 西游记>, <Books: 西游记2>]>
    #SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE (`app01_books`.`title` = '张三丰' or `app01_books`.`kucun` > 500) LIMIT 21; args=('张三丰', 500)


    查询书籍名称不是张三丰或者库存数量小于500的书籍
    q = Q()
    q.connector = 'or'  # 默认是and,此处修改为了 or
    q.children.append(('title', '张三丰'))
    q.children.append(('kucun__gt', 500))
    res = models.Books.objects.filter(~q)     #取反
    print(res)
    #结果:<QuerySet [<Books: 吝啬鬼>]>
    #SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE NOT ((`app01_books`.`title` = '张三丰' or `app01_books`.`kucun` > 500)) LIMIT 21; args=('张三丰', 500)



posted @ 2019-12-01 22:06  大海一个人听  阅读(251)  评论(0编辑  收藏  举报