FのDjangoのORM、Qクエリおよびトランザクション

コンテンツディレクトリ

  、F、Qクエリ
  第二に、トランザクション
  だけ延期する三、

、F、Qクエリ

"" " 
    製品テーブルのデータ:
    1〜2000 3000ゴム2 
    。2鉛筆、200が12である3 
    。3 30 23は、Huawei社ポルシェ18000である
    。4 3680 24 12ソニーA6000である
" "" 
クエリは、販売商品50件の数よりも大きい
#1 RES = models.Product。 objects.filter(maichu__gt = 50) <クエリセットその[<製品:対象の商品名:ゴム>]>
1. Fクエリ
あなたは二つのフィールドを比較したい場合は、私たちは、DjangoのF()を達成するために必要です。
 1 )第一F.、Qを導入して
      から django.db.models インポートF.、Q 
     2 )商品の在庫販売するクエリの数よりも大きい
    RESを = models.Product.objects.filter(maichu__gt = F(' Kucun ' ))
    <クエリセット[<製品:対象の商品名:Huawei社ポルシェ>、<製品:対象の商品名:ソニーA6000>]> (

3すべての項目100の価格を増加させる
    。models.Product.objects.updateを(価格 = F.(' 価格。')+100 "" " 
    テーブルのデータあなたが価格変更後:
    1 2000 3000ゴム102  
    2鉛筆、10312200
    。3ポルシェ181003023 Huawei社
    4 12 24-3780ソニーA6000 
    「」
    
"( 4)すべての商品の名前で後から追加します。のための特別な
    から django.db.models.functions インポートの連結方式
     から django.db.models インポート
    models.Product.objects。アップデート(名前 =の連結方式(F.(名前)、値(のための特別なは)))
    
    単純名使用:説明 = F.(価格)+ のために特別な動作しない、持っています
     "「」 
    データの改訂後:
    特開2000 3000 102用消しゴム
    2 200 103であり、鉛筆12が特殊である
    。3 30 Huaweiでポルシェ文献-23 18100のためのものである
    。4ソニーA6000特許37802412のための
    "" "
2. Qクエリ
(1)RES = models.Product.objects.filter(= 102価格<クエリセットその[<製品:対象の商品名:ゴム公報ため>]> 
 2)models.Product.objects.filter RES =(Q( = 103価格)、Q(名前= ' 特用消しゴム'))  
    <クエリセット[]その> 
 3)models.Product.objects.filter RES =(Q(= 103価格)|。Q(名= ゴム以下のために敷設'))  又は
    <クエリセットすなわち[:対象の商品名:対象の商品名:敷設用鉛筆>>、<製品の敷設ゴム<製品]> 
 4 )の両方の混合物を、Qことに留意すべきで共通オブジェクトは、フィルタ条件の前に配置しなければならない
    RES = models.Product.objects.filter(〜Q(名前= 特用消しゴム)、価格= 103<クエリセットすることを【<商品:商品名オブジェクト:鉛筆のための文献>]>非ゴム文献供給、商品103の料金

 条件を動的に追加することができる来るユーザ入力を照会する 
    Qが= Q ()
    q.connector = ' または'   #は、デフォルトでは、オブジェクトQとにパラメータの関係であってもよい 
    q.children.append((' 価格'、102 ))
    q.children.append((' 名前'' ゴム用の特殊' ))
    RES = models.Product.objects.filter(Q)  Qは、デフォルトのオブジェクトのクエリと
    <クエリセットその[<製品:対象の商品名:ゴム公報ため>]>

第二に、トランザクション

(1 )ACIDトランザクション
      「」「
     アトミック
     一貫性     
     分離
     永続
     」「」 2 )コードの実装:
     から django.db インポートトランザクション
     から django.db.models インポートF. 
    transaction.atomicと(): 
        とでトランザクションの書き込み操作をコード片 
        models.Product.objects.filter(ID = 1).Update(kucun = F(' kucun ')-1 
        models.Product.objects.filter(ID = 1).Update(maichu F. =(' maichu ')+ +1 書き込み追加のコード・ロジック

だけ延期する三、

1 基準の例。
RESの =のmodels.Product.objects.values(' 名前'  <クエリセットその[{ ' 名前'' 特用消しゴム' }、{ ' 名前'' のための文献鉛筆' }、{ ' 名前ポルシェため公報Huawei社 }、{ 名前のための文献ソニーA6000 ' }]> 

2 .onlyとクエリを取得するための延期は、オブジェクトであるが、二つの対向

RES = models.Product。 objects.only("名前"  
解像度を = models.Product.objects.defer(' 名前' のための I RES:
     印刷(i.name) 
     1 )実行結果から、クエリの結果は、以下のみを実行、SQLステートメント、差が表示されます。フィールド指定されたデータのみを取り出し、指定されたフィールドを除く他のすべてのデータを削除することです延期、 2 )が、その後、対象外、または対応するフィールドのプロパティを指摘することができ、彼は適切なSQLを実行しようとしていますデータベースへのステートメントは、再びデータを照会します。 3 )(同じ結果)以下のように上記のコードが実行される結果:
 #を<クエリセット[<商品こと:商品の名前は、オブジェクトのための:公報ゴム>、<商品:商品の名前は、オブジェクト:商品オブジェクト:鉛筆>、<製品のための特名前:ポルシェのための特別な華為>、<製品:商品オブジェクトの名前:>ソニーのA6000の特別]>

 

おすすめ

転載: www.cnblogs.com/xt12321/p/11018789.html