zoukankan      html  css  js  c++  java
  • ORM之F和Q

    一、F查询   

      主要用来获取原数据进行计算。

    from django.db.models import F
    from app01.models import Goods
     
    Goods.objects.update(price=F("price")+10)  # 对于goods表中每件商品的价格都在原价格的基础上增加10元

        就这样一条简单的语句就完成了对表中所有商品价格的更新,是不是很方便!如果没有F查询,你首先要获取原价格,再做一个算术运算,然后更新字段。F查询专门对对象中某列值的操作,不可使用__双下划线!

    二、Q查询

      用来进行复杂查询

        Q查询可以组合使用 “&”, “|” 操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象,Q对象可以用 “~” 操作符放在前面表示否定,也可允许否定与不否定形式的组合。Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。

    from django.db.models import Q
     
    print(Book.objects.filter(Q(id=3))[0])  # 因为获取的结果是一个QuerySet,所以使用下标的方式获取结果
    print(Book.objects.filter(Q(id=3)|Q(title="Go"))[0])  # 查询id=3或者标题是“Go”的书
    print(Book.objects.filter(Q(price__gt=70)&Q(title__startswith="J")))  # 查询价格大于等于70并且标题是“J”开头的书
    print(Book.objects.filter(Q(title__startswith="J") & ~Q(id=3)))  # 查询标题是“J”开头并且id不是3的书
    print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))  # Q对象可以与关键字参数查询一起使用,必须把普通关键字查询放到Q对象查询的后面
    from django.db.models import Q
     
    con = Q()
    q1 = Q()
    q1.connector = "AND"
    q1.children.append(("email", "123@qq.com"))
    q1.children.append(("password", "abc123"))
     
    q2 = Q()
    q2.connector = "AND"
    q2.children.append(("username", "abc"))
    q2.children.append(("password", "xyz123"))
     
    con.add(q1, "OR")
    con.add(q2, "OR")
     
    obj = models.UserInfo.objects.filter(con).first()
    
  • 相关阅读:
    <学习笔记>Algorithm Library Design 算法库设计in c++ III(设计策略)
    Openmesh函数库设计及与CGAL的对比
    Android全屏设置的两种方式
    notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别?
    android计量单位dip、px、sp之间区别与联系
    c# using作用
    C# sealed 关键字
    Codeforces Round #188 (Div. 2) A. Even Odds
    Github 使用中出现的问题解决方法
    ios开发:如何加载大量图片 相册示例
  • 原文地址:https://www.cnblogs.com/liusouthern/p/8987453.html
Copyright © 2011-2022 走看看