django中F表达式和Q函数应用与原理详解

 更新时间:2023年05月19日 09:33:36   作者:花开花落与云卷云舒  
F对象查询与Q对象查询,刚看到大家一定会感到很陌生,其实它们也是 Django 提供的查询方法,而且非常的简单的高效,下面这篇文章主要给大家介绍了关于django中F表达式和Q函数应用与原理的相关资料,需要的朋友可以参考下

一、F表达式

1.1 原理

F表达式是对数据库中某列值进行操作,允许还没有链接到数据的情况下对数据库字段的值进行操作,而不需要获取到对象放在内存中再对字段进行操作,直接执行原sql语句。

在通常情况下,我们在操作数据的时候都是先从数据库中将原数据取出放到内存中,然后再编辑某些属性,最后再提交。

1.2 应用

初始数据库数据

使用F字段直接进行数学运算

from django.db models import F
 res = models.Bbook.objects.all().update(read_num=F('read_num')+1)

操作之后,数据库中的数据都加5

Django中提供F 表达式, 就是将模型字段的值与同一模型中的另一个字段进行比较。

例如,查询read_num大于等于230的name:

from django.db.models import F
Game.objects.filter(bread__gte=F('read_num'))

F() 对象使用常量和其他 F() 对象的加法,减法,乘法,除法,模和幂运算。 

F()也可以具体到某一个字段的操作。

将阅读数增加100

Game.objects.update(price=F("read_num") + 100)

二、Q函数

2.1 原理

  • Q对象相当于查询时使用 or 语句 ;
  • Q对象可以使用 & 和 | 进行组合运算, 当一个操作符用于两个Q对象时,它就会生成一个新的Q对象;
  • Q对象可以用 “~” 操作符放在前面表示否定,也可允许否定与不否定形式的组合;
  • Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面;

2.2 例子

# 查询价格大于等于70并且标题是“J”开头的书
Book.objects.filter(Q(price__gte=70)&Q(title__startswith="J")) 
# 查询标题是“J”开头并且id不是3的书
Book.objects.filter(Q(title__startswith="J") & ~Q(id=3))  
# Q对象可以与关键字参数查询一起使用,必须把普通关键字查询放到Q对象查询的后面
print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))  

总结

到此这篇关于django中F表达式和Q函数应用与原理的文章就介绍到这了,更多相关django中F表达式和Q函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于python生成词云图的代码示例

    基于python生成词云图的代码示例

    这篇文章主要个介绍了如何基于python生成词云图的代码示例,文中有详细的代码示例喝图文讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-11-11
  • 如何用pandas读取一个文件或某个文件夹下所有文件

    如何用pandas读取一个文件或某个文件夹下所有文件

    这篇文章主要介绍了如何用pandas读取一个文件或某个文件夹下所有文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python使用multiprocessing实现多进程

    Python使用multiprocessing实现多进程

    当我们工作中涉及到处理大量数据、并行计算或并发任务时,Python的multiprocessing模块是一个强大而实用的工具,在本文中,我们将探索如何使用multiprocessing模块实现多进程编程,将介绍进程池的概念和用法,需要的朋友可以参考下
    2024-10-10
  • python的metaclass使用小结

    python的metaclass使用小结

    python中的metaclass可谓熟悉而又陌生,自己开发时很少用,阅读源码时却经常遇到,那么到底什么是metaclass呢?何时使用metaclass呢?这篇文章主要介绍了python的metaclass,需要的朋友可以参考下
    2024-01-01
  • 如何基于windows实现python定时爬虫

    如何基于windows实现python定时爬虫

    这篇文章主要介绍了如何基于windows实现python定时爬虫,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python爬虫设置ip代理过程解析

    Python爬虫设置ip代理过程解析

    这篇文章主要介绍了Python爬虫设置ip代理过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 如何用python 操作MongoDB数据库

    如何用python 操作MongoDB数据库

    这篇文章主要介绍了如何用python 操作MongoDB数据库,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • 盘点Python中读取和提取JSON文件的4种方法

    盘点Python中读取和提取JSON文件的4种方法

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,Python中提供了多种方式来读取和处理JSON文件,本文将详细介绍四种常见的方法,希望对大家有所帮助
    2024-03-03
  • 基于PyQt6编写一个串口调试助手

    基于PyQt6编写一个串口调试助手

    这篇文章主要为大家详细介绍了如何基于PyQt6编写一个串口调试助手,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Python爬虫与反爬虫大战

    Python爬虫与反爬虫大战

    这篇文章主要介绍了Python爬虫与反爬虫的相关资料,文中讲解非常细致,帮助大家更好的理解Python爬虫与反爬虫的关系,感兴趣的朋友可以了解下
    2020-07-07

最新评论