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. Vue图片验证码-自定义组件高级版

    最近项目中要用到图片验证码,网上一查有很多,基本都是千篇一律的4位纯数字验证码.首先得感谢那位一代目兄台提供的模板,由于不能满足需求,所以对其进行了改造升级. 经改造的图片验证码能满足一下情形使用:① ...

  2. 如何在IDEA中使用GitHub

    第一步:在GitHub网站中注册自己的账号 地址:https://github.com/ 第二步:下载Git客户端 地址:https://git-scm.com/ 第三步:在GitBash中配置用户名 ...

  3. 对象浅拷贝Object.assign

    const target = { a: { b: { c: { d: 1 } }, e: 5, f: 6, h: 10 } } const source = { a: { b: { c: { d: 1 ...

  4. VSCode添加git bash作为默认终端

    VSC添加git bash作为默认终端的settings.json添加 { "terminal.integrated.shell.windows": "D:\\Progr ...

  5. JS中BOM操作知识点

    JS BOM window对象 全局变量和全局方法都归在window上 alert-comfirm-prompt 让alert .confirm等弹出框上的提示文字实现换行:\n // confirm ...

  6. ROS开发--在订阅话题的回调函数中发布话题

    处理激光数据时,需要将处理后的激光数据再发布,需要保持一致的频率,所以必须在回调函数中发布激光数据信息. 代码参考:https://blog.csdn.net/heyijia0327/article/ ...

  7. cartographer保存地图

    手持激光,并用cartographer建图,保存的地图是.pbstream格式 ht@ht:~$ rosservice call /write_state /home/ht/Desktop/carto ...

  8. PIE-SDK For C++矢量数据空间索引的创建

    1.功能简介 空间索引的使用便于数据的查询:所以在创建矢量数据的时候创建空间索引,下面对矢量数据如何创建空间索引进行功能介绍. 2.功能实现说明 2.1 实现思路及原理说明 第一步 创建矢量要素数据集 ...

  9. IntelliJ IDEA 2019年最新版2019.3.1 安装激活教程【最强,可用至2100、2089年】

    IntelliJ IDEA 2019年最新版 永久激活教程 本文包括最新[2019.3.1 & 1.3]激活 和[2018.3.2]激活 说明:①2019.3.②2019.1.③2018.3版 ...

  10. 深入浅出Mybatis系列七-mapper映射文件配置之insert、update、delete

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(六)---objectFactory.p ...