Django的F对象(在不获取MySQL字段的情况下操作、比较字段)和Q对象(对查询结果集进行逻辑运算)

文章目录

from: https://blog.csdn.net/liuxingxing_star/article/details/104024396

F对象

  • 一个F对象代表数据库中某条记录的字段的信息
  1. 作用:

    • 通常是对数据库中的字段值在不获取的情况下进行操作
    • 用于类属性(字段)之间的比较。
  2. 用法

    • F对象在数据包 django.db.models 中,使用时需要先导入
      • from django.db.models import F
  3. 语法:

    from django.db.models import F
    F('列名')
    
    • 1
    • 2
  4. 说明:

    • 一个 F() 对象代表了一个model的字段的值
    • F对象通常是对数据库中的字段值在不加载到内存中的情况下直接在数据库服务器端进行操作
  5. 示例1

    • 更新Book实例中所有的零售价涨10元
    models.Book.objects.all().update(market_price=F('market_price')+10)
    # 以上做法好于如下代码(不加载到内存,直接修改)
    books = models.Book.objects.all()
    for book in books:
        book.update(market_price=book.marget_price+10)
        book.save()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  6. 示例2

    • 对数据库中两个字段的值进行比较,列出哪儿些书的零售价高于定价?
    from django.db.models import F
    from bookstore import models
    books = models.Book.objects.filter(market_price__gt=F('price'))
    for book in books:
        print(book.title, '定价:', book.price, '售价:', book.market_price)
    
    • 1
    • 2
    • 3
    • 4
    • 5

Q对象 – Q()

  • 当在获取查询结果集 使用复杂的逻辑或 | 、 逻辑非 ~ 等操作时可以借助于 Q对象进行操作

  • 如: 想找出定价低于20元 或 清华大学出版社的全部书,可以写成

    models.Book.objects.filter(Q(price__lt=20)|Q(pub="清华大学出版社"))
    
    • 1
  • Q对象在 数据包 django.db.models 中。需要先导入再使用

    • from django.db.models import Q
  1. 作用

    • 在条件中用来实现除 and(&) 以外的 or(|) 或 not(~) 操作
  2. 运算符:

    • & 与操作
    • | 或操作
    • 〜 非操作
  3. 语法

    from django.db.models import Q
    Q(条件1)|Q(条件2)  # 条件1成立或条件2成立
    Q(条件1)&Q(条件2)  # 条件1和条件2同时成立
    Q(条件1)&~Q(条件2)  # 条件1成立且条件2不成立
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
  4. 示例

    from django.db.models import Q
    # 查找清华大学出版社的书或价格低于50的书
    models.Book.objects.filter(Q(market_price__lt=50) | Q(pub_house='清华大学出版社'))
    # 查找不是机械工业出版社的书且价格低于50的书
    models.Book.objects.filter(Q(market_price__lt=50) & ~Q(pub_house='机械工业出版社'))
原文链接:,转发请注明来源!

发表评论