zoukankan      html  css  js  c++  java
  • Django之F、Q查询,事务,自定义char字段

        F查询
            from django.db.models import F,Q
            # 当查询条件来自于数据库的某个字段,这个时候就必须使用F
            # 查询卖出数大于库存数的商品
            res = models.Product.objects.filter(maichu__gt=F('kucun'))
            # 将所有商品的价格提高100块
            models.Product.objects.update(price=F('price')+100)
            # 将所有商品的名字后面加一个爆款后缀
            from django.db.models.functions import Concat
            from django.db.models import Value
            
            models.Product.objects.update(name=F('name')+'爆款')  # 错误示范
            models.Product.objects.update(name=Concat(F('name'),Value('爆款')))
        Q查询 
            # 当你的查询条件想以或的关系查询数据
            models.Product.objects.filter(Q(name='变形金刚'),Q(price=999.99))  # 这样写默认还是and关系
            models.Product.objects.filter(Q(name='变形金刚')|Q(price=999.99)) 
            # Q与普通过滤条件混合使用
            models.Product.objects.filter(Q(name='变形金刚'),price=100.00)
            
            
            Q查询进阶操作(******# 先实例化一个Q对象
            q = Q()
            q.connector = 'or'
            q.children.append(('name','jason'))
            q.children.append(('price',666))
            # q对象支持直接放在filter括号内
            models.User.objects.filter(q)  # q对象默认也是and关系
        
        事务
            from django.db import transaction
            with transaction.atomic():
                # 这里写多个数据库操作
            print('其他逻辑代码')
        
        自定义字段类型
            class MyCharField(models.Field):
                def __init__(self,max_length,*args,**kwargs):
                    self.max_length = max_length
                    super().__init__(max_length=max_length,*args,**kwargs)
                
                def db_type(self):
                    return 'char(%s)'%self.max_length
            
            class User(models.Model):
                name = models.CharField(max_length=32)
                password = MyCharField(max_length=32)
        
        only与defer
            # 两者是相反的
            res = models.User.objects.only('name')
            
        
        choices字段
            class User(models.Model):
                name = models.CharField(max_length=32)
                password = MyCharField(max_length=32)
                choices = ((1,'重点大学'),(2,'普通本科'),(3,'专科'),(4,'其他'))
                education = models.IntegerField(choices=choices)
                
            user_obj.education  # 拿到的是数字
            user_obj.get_education_display()  # 固定用法 获取choice字段对应的注释
  • 相关阅读:
    会议安排最优算法
    Python Singleton
    Android HandlerThread 源代码分析
    [Android]_[0基础]_[adb 有用命令]
    使用sshfs将远程目录挂载到本地
    Netty 中ChannelOption的含义以及使用的场景
    netty4.0 Server和Client的通信
    Netty重要概念介绍
    Zookeeper单机伪集群
    整数集合
  • 原文地址:https://www.cnblogs.com/dongxixi/p/11042869.html
Copyright © 2011-2022 走看看