オブジェクトベースの、二重下線問い合わせのDjangoのORM

ディレクトリORM返し  DjangoのORMを

内容の:

  まず、オブジェクトベースのクエリテーブル
  第二に、二重の下線の問い合わせに基づいて
  第三に、集計クエリ集計
  第四に、グループ化クエリ注釈

まず、オブジェクトベースのクエリテーブル

1.フォワード・クエリ- >から外側のキーを、対応する外部キーテーブルのルックアップテーブルを含むフィールドの平均値- > フォワード・クエリ簡単に導き出すために 1 )三国プレスブックのクエリがあるメールボックス
        book_obj = models.Book .objects.filter(タイトル= ' 三国' )1次回()
        結果: 123 .qq.com 
         2 )クエリブックが生きている著者の名前
        book_obj = models.Book.objects.filter(タイトル= ' 生きています' ) 1次回()
        印刷(book_obj.authors)#のapp01.Author.None、複数のデータのクエリを表すすべての()を追加する必要があります
        印刷(book_obj.authors.all())
        結果: <クエリセット[<著者:著者オブジェクトの名前:ジェイソン>]> 
         3 )著者は、クエリジェイソンの電話番号であります
        USER_OBJ = models.Author.objects.filter(名前= ' ジェイソン' )1次回()
         プリント(user_obj.authordetail.phone)
        结果: 1110
2.逆引き参照- >外部キーがクエリデータ対応表の先頭から、この表にない- > 比較的小さなトラブル
  1 )南クエリを押して、ブック対多の逆引き参照フィールド公表
         #をまず、書籍やサザン・プレスは関係が、そこブックの外部キーであるが、ことを確認してください
        #はプレスからのデータを照会するために始めた、出版は、最初のテーブルにテーブル全体に固定された文法書を使用して、オブジェクトを取得し、最後にデータを取得します。
        = models.Publish.objects.filterのpublish_obj(名= ' サザン・プレス' )1次回()
         印刷(publish_obj.book_set)  app01.Book.Noneの
        印刷(publish_obj.book_set.all 
  ()) ( 2 )の著者を検索しますジェイソン逆クエリ書かれたすべての書籍、多くの分野
        author_obj = models.Author.objects.filter(名前= ジェイソン)1次回()
         プリント(author_obj.book_set)   #1 app01.Book.Noneの
        印刷(author_obj.book_set.all 
   ()) ( 3 )問い合わせ電話番号の逆引きの著者名フィールド110である
        authordetail_obj = models.AuthorDetail.objects.filter(電話= 110 )1次回()
         印刷(authordetail_obj.author.name)

第二に、二重の下線の問い合わせに基づいて

1 。フォワード・クエリ 1 )三国問い合わせブックのために家のアドレス公開
    RESを = models.Book.objects.filter(タイトル= ' 三国').values(' publish__addr '' タイトル' 
      2 )クエリブックス著者名生きているとして
    RES = models.Book.objects.filter(タイトル= ' 生きている').values(" authors__name "' タイトル' 
     3 )クエリ著者ジェイソンの故郷
    のRES =のmodels.Author.objects。フィルタ(名前= " ジェイソン').values(' authordetail__addr "
2 。ルックアップリバース 1 )サザンクエリタイトル押し
    RES = models.Publish.objects.filter(NAME = ' サザンプレス').values(' book__title ' 
     2 )電話番号照会120に対する著者の名前
    RES = models.AuthorDetail.objects.filter(電話= 120).values(author__name 
     3 )のジェイソンによって書かれた本の名前に、クエリの
    RES = models.Author.objects.filter(名前= " ジェイソン).values(book__title " 
     4 三国電話番号の著者として)クエリの本
    RES= models.Book.objects.filter(タイトル= ' 三国演义').values(' authors__authordetail__phone '
(1 )クエリジェイソン著者の電話番号
  前方クエリの 
    RES = models.Author.objects.filter(名前= ' ジェイソン').values(' authordetail__phoneを' 
    
 #の逆引き参照 
    のres = models.AuthorDetail.objects.filter( = author__name ジェイソン).values(電話番号 2 の)東洋プレスのすべての書籍のためのプレスのお問い合わせ名と価格
  前方クエリの 
    RES = models.Publish.objects.filter(名前= " 東洋出版株式会社').values(' book__title ' ' book__price' 
 #は、ルックアップリバース 
    RES = models.Book.objects.filter(publish__name = ' オリエンタル押して').values(' タイトル' ' 。価格"  3 )クエリオリエンタルプレス公表価格は400よりも大きく、ブック
  前方クエリ 
    RES = models.Publish.objects.filter(名前= " 東洋プレス"、book__price__gt = 400).values(' book__title '' book__price ' 
 
 #の逆引き参照 
    のres =のmodels.Book.objects。フィルタ(price__gt = 400、publish__name = 'オリエンタルプレス').values(' タイトル' ' 。価格

第三に、集計クエリ集計

1 パイロットパッケージ必要
 から django.db.models インポート、MAX、MIN、カウントの合計、平均
 2 。の例 1 問い合わせの)数すべての書籍の
    RES = models.Book.objects.filter(PK = 3)。集計(count_num数=(' 作者で' ))  2 )クエリの平均価格によって公開すべての書籍
    RES = models.Publish.objects.aggregate(avg_price =平均(' book__priceは' ))  3 )統計東出版された書籍の数
    RES = models.Publish.objects.filter(名= オリエンタルプレス).aggregateは((=カウントをcount_num' book__id ' ))

第四に、グループ化クエリ注釈

1  1 )を押して各書籍の平均価格の統計
    RES = models.Publish.objects.annotate(
        avg_price =平均(' Book__price '))。値(' 名前'' avg_price '  2 )各書籍の数カウント
    RES = models.Book.objects.annotate(
        count_num =カウント数(' 作者で'))。値(' タイトル'' count_numを' 
     3最も安い書籍の価格販売する各出版社の)統計
    RES = models.Publish.objects.annotate(
        MIN_PRICE = MIN(' book__price '))。値(' 名前'' MIN_PRICE ' 
     4 )クエリごとにこの本の著者の合計価格
    RES = models.Author.objects.annotate(
        sum_price =和(' book__price '))。値(' 名前'' sum_price '

 

 

ます。https://www.cnblogs.com/xt12321/p/11012907.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33811961/article/details/93382421