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) 
  • 相关阅读:
    作业5,6 2019/10/23
    作业1、2、3、4 2019/10/23
    实现Map传参Mybatis
    maven工程配置pom.xml实现mybatis的访问数据库操作
    测试
    Postman篇之命令行测试
    unittest框架
    测试
    测试
    测试
  • 原文地址:https://www.cnblogs.com/wangkaiok/p/10493608.html
Copyright © 2011-2022 走看看