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. C# 图片转为Base64

    /// <summary> /// 图片转Base64 /// </summary> /// <param name="ImageFileName"& ...

  2. Spark学习之路 (二十八)分布式图计算系统[转]

    引言 在了解GraphX之前,需要先了解关于通用的分布式图计算框架的两个常见问题:图存储模式和图计算模式. 图存储模式 巨型图的存储总体上有边分割和点分割两种存储方式.2013年,GraphLab2. ...

  3. R 拼接结果展示

    学长教的拼接结果展示 哇,R 简直太有魅力了! 晚一点补充

  4. vue.js事件传值之子组件传向父组件以及$emit的使用

    在项目开发中,有时候会遇到一种需求比如是:在子组件中,通过一个事件,比如点击事件,去改变父组件中的某个值,下面来看看是怎么个流程 还是先截图目录结构 父组件为app.vue,components中的文 ...

  5. .NetCore3.0短网址项目

    Wei.TinyUrl 基于.NetCore3.0 + Mysql开发的短网址项目 项目地址:https://github.com/a34546/Wei.TinyUrl 演示效果: 快速开始 1. 修 ...

  6. Codeforces Round #616 (Div. 2) C. Mind Control

    题目链接:http://codeforces.com/contest/1291/problem/C 思路: 我们可以很容易想到,只有前m-1个人才能影响m的选择的大小,后面的人无法影响. 如果所有人都 ...

  7. 将内裤穿在外面的男人(mysql)

    superman 的好处是可以为所欲为,不仅可以修改自己的密码,还能给别人授权,修改别人的密码. 1.修改自己 的密码 首先要先登录mysql, 然后: mysqladmin   -u   root ...

  8. shell变量内字符替换和变量字符修改

    vi test.sh a= #将${a}里的第一个123替换为321 b=${a//}; echo "echo variable a" echo $a echo "ech ...

  9. PP: Deep r -th Root of Rank Supervised Joint Binary Embedding for Multivariate Time Series Retrieval

    from: Dacheng Tao 悉尼大学 PROBLEM: time series retrieval: given the current multivariate time series se ...

  10. Vim入门——Windows下安装

    下载页面:https://www.vim.org/download.php Windows选用的是MS-Windows: 下图为展示: 因为最近被墙,镜像貌似没中国内陆地区,因此,选择使用GitHub ...