zoukankan      html  css  js  c++  java
  • 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)
    
    
    
    
  • 相关阅读:
    ssm整合之配置applicationContext-service.xml
    ssm整合之配置applicationContext-dao.xml
    ssm整合之mybatis配置文件SqlMapConfig.xml
    ssm整合之导包
    java BigDecimal工具类
    java中json依赖包
    Servlet+Json代码
    xstream+dom4j比较对象
    分析堆栈跟踪元素
    myeclipse搭建activemq 简单聊天
  • 原文地址:https://www.cnblogs.com/ludundun/p/11968001.html
Copyright © 2011-2022 走看看