F查询:

  之前构造的过滤器都是将字段值与某个我们设定的常亮做比较,如果我们要对两个字段的字段的值做比较久需要用到F查询;F查询可以用来比较同一个model事例中两个不同字段的值,

准备工作:

  创建数据库,使用orm创建表,使用Navicat添加数据,也可以使用pycharm中的database功能连接mysql添加数据

from django.test import TestCase

# Create your tests here.
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test01.settings")
import django
django.setup()
from app01 import models # 查询卖出数大于50的商品
# res = models.Product.objects.filter(maichu__gt=50)
# print(res) # 查询卖出数大于库存数的商品,F查询
from django.db.models import F,Q res=models.Product.objects.filter(maichu__gt=F('kucun'))
print(res)

  

    # 将所有商品的价格提高100块
res = models.Product.objects.update(price=F('price')+100)
print(res)

  

    #将所有的商品的名字后面都加一个爆款
from django.db.models.functions import Concat
from django.db.models import Value
res=models.Product.objects.update(name=Concat(F('name'),Value('爆款')))
print(res)

  

Q查询:

  filter() 方法中传入多个值用逗号分开表示的意思的并且的关系,如果需要用到或条件的时候可以用Q查询

  

    #查询卖出数大于300或者价格小于100块的商品
res=models.Product.objects.filter(Q(maichu__gt=300)|Q(price__lt=100))
print(res)

  Q查询也可以当做并且条件使用:

  

    res =models.Product.objects.filter(Q(name='衣服爆款'),Q(maichu=1001))
print(res)
# 名字和卖出条件都满足的数据为空,查询出的结果为空

  

    res =models.Product.objects.filter(Q(name='衣服爆款'),Q(maichu=1000))
print(res)
#名字和卖出都满足的的情况下有数据输出

  

  ‘~’:相反意思

    # 价格是100不是衣服爆款的商品
res =models.Product.objects.filter(Q(price=100.00)|~Q(name='衣服爆款'))
print(res)

  

事物

  原子性

  一致性

  隔离性

  持久性

  

  开启事务:

  

    #开启事物
from django.db import transaction
with transaction.atomic(): #事物要么全部成功,要么全部失败
# with代码块中写入书屋操作
models.Product.objects.filter(id=1).update(kucun=F('kucun')-1)
models.Product.objects.filter(id=1).update(maichu=F('maichu')+1)
print('操作完成')

  

事物执行成功

查看sql数据是否被修改了

在原有的表格字段上添加新的字段

迁移数据,把新增的字段写入的数据库中

  python3 manage.py makemigrations

  python3 manage.py migrate

查看数据库中新增字段是否添加上:

数据库中限制存数据的值

执行命令:

  python3 manage.py makemigrations

  python3 manage.py migrate

查看数据库是否创建完成:

  

查询数据:

只能查询到数据库中的值,但是查询不到写入的对应的值

通过get_字段名__display()来获取设置的值

  

F与Q查询的更多相关文章

  1. 70 多表查询的分组F 聚合 Q 查询

    聚合查询和分组查询 聚合 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函 ...

  2. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  3. Django中多表的增删改查操作及聚合查询、F、Q查询

    一.创建表 创建四个表:书籍,出版社,作者,作者详细信息 四个表之间关系:书籍和作者多对多,作者和作者详细信息一对一,出版社和书籍一对多 创建一对一的关系:OneToOne("要绑定关系的表 ...

  4. django----聚合查询 分组 F与Q查询 字段 及其 参数

    目录 一.orm补充查询 聚合查询 1-1 分组查询 1-2 F与Q查询 1-3 二. 字段及其参数 常用字段 AutoField IntegerField CharField DateField D ...

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

    #F与Q查询 #*************************** F 查询 ******************** # F 查询数据库中的其他字段!!! #1.查询库存数大于卖出数的书籍 fr ...

  6. django F与Q查询 事务 only与defer

    F与Q 查询 class Product(models.Model): name = models.CharField(max_length=32) #都是类实例化出来的对象 price = mode ...

  7. Django ORM 之F、Q查询与事务

    返回ORM目录 Django ORM 内容目录 一.F.Q查询 二.事务 三.only与defer 一.F.Q查询 """ Product表中的数据: 1 橡皮 2 20 ...

  8. django之 F与Q查询

    F与Q查询 F查询 why?

  9. F与Q查询 事务 choices参数

    F与Q查询 F查询 当我们需要将两个字段对应的数据进行比较时就需要用到F查询. select * from book where sold > stock 1.例如需要将售出部分数据和库存数据进 ...

  10. Django 聚合查询 分组查询 F与Q查询

    一.聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数 ...

随机推荐

  1. centos python虚拟环境安装

    pip install virtualenv pip install virtualenvwrapper vim ~/.barshrc export VIRTUALENVWRAPPER_PYTHON= ...

  2. 使用Docker镜像安装saltshaker

    要求 Saltstack < 2019 Python >= 3.6 Mysql >= 5.7.8 (支持Json的Mysql都可以) Redis(无版本要求) RabbitMQ (无 ...

  3. Gerrit评审代码流程注意事项

    Gerrit管理CR流程时要注意下面两大事项: (一)格式规范 这部分主要是根据公司或者团队的要求规范来撰写格式,这里不做统一介绍了:格式规范的宗旨是让修改的代码和业务需求能够匹配.可追溯. (二)评 ...

  4. SGDClassifier梯度下降分类方法

    SGDClassifier梯度下降分类方法 这个分类器跟其他线性分类器差不多,只是它用的是mini-batch来做梯度下降,在处理大数据的情况下收敛更快 1.应用 SGD主要应用在大规模稀疏数据问题上 ...

  5. 巨杉数据库SequoiaDB】巨杉Tech | SequoiaDB 分布式事务实现原理简介

    1 分布式事务背景 随着分布式数据库技术的发展越来越成熟,业内对于分布式数据库的要求也由曾经只用满足解决海量数据的存储和读取这类边缘业务向核心交易业务转变.分布式数据库如果要满足核心账务类交易需求,则 ...

  6. 一个扩展搜索API的优化过程

    概述 API 是一个服务的门面,就像衣装是人的形象一样. 优雅的 API 设计,能让业务方使用起来倍儿爽,提升开发效率,降低维护成本:糟糕的 API 设计,则让业务方遭心,陷入混沌. 本文将展示一个扩 ...

  7. vue router的嵌套使用与传值的query方式

    嵌套路由 当我们不满足与 /home这种路由,而是希望通过 /home/news和/home/message访问一些内内容 那么就需要嵌套路由了 实现嵌套路由有两个步骤: ·创建对应的子组件,并且在路 ...

  8. js异步执行 按需加载 三种方式

    js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...

  9. 扩展BSGS求解离散对数问题

    扩展BSGS用于求解axΞb mod(n) 同余方程中gcd(a,n)≠1的情况 基本思路,将原方程转化为a与n互质的情况后再套用普通的BSGS求解即可 const int maxint=((1< ...

  10. AcWing 6. 多重背包问题 III

    //f[i,j] 所有只从前i块能量石中选,且总体积恰好为j的方案数 #include <iostream> #include <algorithm> #include < ...