django FクエリーとQクエリー、トランザクション

9091 ワード

目次:
  • Fクエリ
  • Qクエリ
  • トランザクション
  • Fクエリー
    2つのフィールドの値を比較する場合は、Djangoを使用してF()を指定して比較します.F()のインスタンスは、同じモデルインスタンスの2つの異なるフィールドの値を比較するために、クエリーでフィールドを参照することができる.
    例1:
    #               
    
    from django.db.models import F
    ret1=models.Product.objects.filter(maichu__gt=F('kucun'))
    print(ret1)
    
    # F                          ,           
    

    例2:
    #           50 
    
    models.Product.objects.update(price=F('price')+50)
    
    #  :           
    
    #     char  
    
    #  :         '  ',(              Concat  ,        Value)
    
    from django.db.models.functions import Concat
    from django.db.models import Value
    ret3=models.Product.objects.update(name=Concat(F('name'),Value('  ')))
    
    #  :            ,         
    

    カタログに戻る
    Qクエリ
    filter()などのメソッドでカンマで区切られる条件は、との関係です.より複雑なクエリー(OR文など)を実行する必要がある場合は、Qクエリーを使用します.
    例1:
    #         100        100  
    
    from django.db.models import Q
    models.Product.objects.filter(Q(maichu__gt=100)|Q(price__lt=100))
           Q  ,filter           
    

    例2:
    #        100         0    
    
    models.Product.objects.filter(Q(kucun=100)&~Q(maichu=0))
    #      &  |                       Q   。
    
    #   ,Q       ~      ,             (NOT)   。
    

    例3:
    #          ,        60 
    
    models.Product.objects.filter(Q(kucun__gt=60), name__contains="  ")
    #  :          Q         。            (      Q   )  "AND”   。  ,    Q   ,               。
    

    カタログに戻る
    取引
    複数のsql文の操作を原子間操作にするか、同時に成功するか、1つの失敗があれば元の状態にロールバックし、データの整合性と一貫性を保証する(NoSQLデータベースはトランザクションに対して一部サポートされている)トランザクション(ACID)A:原子間(Atomicity)原子性とは、トランザクションが分割できない作業単位であり、トランザクションの操作が発生するか、何も起こらないか.C:コンシステンシトランザクションの前後のデータの整合性は、一貫性を保つ必要があります.I:独立性(Isolation)トランザクションの独立性は、複数のユーザーが同時にデータベースにアクセスする場合、データベースは各ユーザーが開いているトランザクションであり、他のトランザクションの操作データに干渉されず、複数の同時トランザクション間で相互に独立しなければならない.D:Durability(Durability)永続性とは、トランザクションがコミットされると、データベース内のデータの変更が永続的であり、次にデータベースに障害が発生しても影響を及ぼすべきではないことを意味します.
    例1:
    # 1.         
    # 2.          +1,    -1
    from django.db.models import F
    from django.db import transaction
    #       
    try:
    	with transaction.atomic():
    		#         
    		models.Order.objects.create(num="110110111", product_id=1, count=1)
    		#      
    		models.Product.objects.filter(id=1).update(kucun=F("kucun")-1, maichu=F("maichu")+1)
    except Exception as e:
    	print(e)
    
    

    カタログに戻る