当前位置: 首页 > news >正文

F和Q事务

现在增加了书的销量sale字段和stock库存字段。

已知

from django.db import models

# Create your models here.

class Person(models.Model):

    nid = models.AutoField(primary_key=True)
    name = models.CharField(verbose_name='姓名',max_length=32,null=True,blank=True,db_column='username')
    age = models.IntegerField(editable=False)   #int类型
    birth = models.DateTimeField(auto_now=True)
    gender = models.BooleanField(choices=((0, ''), (1, '')))

    class Meta:
        db_table = "person"

        verbose_name='个人信息'

        verbose_name_plural='所有用户信息'

    def __str__(self):
        return '<Person: {} - {} - {}>'.format(self.pk, self.name, self.age)

class Publisher(models.Model):
    name = models.CharField(max_length=32)

    def __str__(self):
        return '<Publisher: {} - {}>'.format(self.pk, self.name)

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5,decimal_places=2)  #最大999.99
    sale = models.IntegerField()
    stock = models.IntegerField()
    publisher = models.ForeignKey('Publisher',related_name='books',related_query_name='book',on_delete=models.CASCADE)

    def __str__(self):
        return '<Book: {} - {}>'.format(self.pk, self.title)

class Author(models.Model):
    name = models.CharField(max_length=32)
    books = models.ManyToManyField('Book')  #多对多创建,后面是要关联的表Book类

 

 

 

Django终端打印SQL语句

在Django项目的settings.py文件中,在最后复制粘贴如下代码:

复制代码
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}
复制代码

即为你的Django项目配置上一个名为django.db.backends的logger实例即可查看翻译后的SQL语句。 

 

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")
    import django

    django.setup()

    from app01 import models

    from django.db.models import F,Q

    #F
    # F吧字段的值取出来,作对比
    # ret = models.Book.objects.filter(sale__gt=F('stock'))
    # print(ret)

    # F吧字段的值取出来,作+-*/
    #让销量翻倍
    #update效率高
    # models.Book.objects.update(sale=F('stock')*2)
    #UPDATE "app01_book" SET "sale" = ("app01_book"."stock" * 2); args=(2,)
    
    # obj = models.Book.objects.get(pk=1)
    # obj.sale = 100
    # obj.save()
    #save是把所有的值都更新的。update效率高,update只更改一个字段。
    
    #Q
    ret = models.Book.objects.filter(pk__gt=1,pk__lt=5)
    ret = models.Book.objects.filter(Q(pk__gte=4) | Q(pk__lte=2)) #| 或
    ret = models.Book.objects.filter(Q(pk__gte=4) & Q(pk__lte=2)) #& 和
    ret = models.Book.objects.filter(Q(Q(pk__gte=4) & Q(pk__lte=2))) #包含
    ret = models.Book.objects.filter(~Q(Q(pk__gte=4) & Q(pk__lte=2))) #~ 非
    
    # ~ 非 | 或 & 与
    print(ret) 

 

转载于:https://www.cnblogs.com/wangkaiok/p/10493608.html

相关文章:

  • MOS管在开关电路中的使用
  • java学习笔记3
  • 男神鹏:python 机器学习三剑客 之 Matplotlib
  • 牛客小白月赛12
  • Django 模板继承extend 标签include block
  • hihocoder contest95 1、3、4题目分析 2赛后补题
  • Bsr.Form框架问题汇总
  • React中super(props)和super()以及不写super()的区别
  • Eclipse安装Web插件
  • 大战设计模式(第二季)【6】———— 从源码看享元模式
  • c:forEach varStatus 属性
  • Python excel 功能扩展库 —— openpyxl 的基本使用
  • python3获取自己ip
  • Gradle的使用
  • A direct formulation for sparse PCA using semidefinite programming
  • [译] React v16.8: 含有Hooks的版本
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • DataBase in Android
  • Effective Java 笔记(一)
  • HTTP中的ETag在移动客户端的应用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • python docx文档转html页面
  • 基于遗传算法的优化问题求解
  • 通过几道题目学习二叉搜索树
  • 微信支付JSAPI,实测!终极方案
  • 我感觉这是史上最牛的防sql注入方法类
  • # Apache SeaTunnel 究竟是什么?
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (3)llvm ir转换过程
  • (floyd+补集) poj 3275
  • (javascript)再说document.body.scrollTop的使用问题
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (论文阅读11/100)Fast R-CNN
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 物件導向與老子思想 (OO)
  • (转)scrum常见工具列表
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net framework4与其client profile版本的区别
  • .Net mvc总结
  • .Net 高效开发之不可错过的实用工具
  • .NET 设计模式初探
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net分布式压力测试工具(Beetle.DT)
  • .NET建议使用的大小写命名原则
  • .net连接MySQL的方法
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @angular/cli项目构建--http(2)
  • @Not - Empty-Null-Blank
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • []新浪博客如何插入代码(其他博客应该也可以)