zoukankan      html  css  js  c++  java
  • 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) 
  • 相关阅读:
    【数据库_Postgresql】实体类映射问题之不执行sql语句
    【数据库_Postgresql】数据库主键自增长之加序列和不加序列2种方法
    【明哥报错簿】之 mybatis异常invalid comparison: java.util.Date and java.lang.String
    【明哥报错簿】可以访问jsp但是访问不到controller
    【明哥报错簿】tomcat 安装时出现 Failed to install Tomcat7 service
    【Java】SVN下载maven项目到eclipse之后,项目红叉,pom.xml出现Missing artifact fakepath:dubbo:jar:2.8.5等缺少jar包情况
    Mysql学习笔记之常用数据类型 (转)
    MySQL--INFORMATION_SCHEMA COLUMNS表
    mysql int(3)与int(11)的区别
    mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别
  • 原文地址:https://www.cnblogs.com/wangkaiok/p/10493608.html
Copyright © 2011-2022 走看看