コンテンツディレクトリ
、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の特別]>