基於雙下劃線的跨表查詢

2022-09-10 08:27:08 字數 2436 閱讀 5238

django 還提供了一種直觀而高效的方式在查詢(lookups)中表示關聯關係,它能自動確認 sql join 聯絡。要做跨關係查詢,就使用兩個下劃線來鏈結模型(model)間關聯欄位的名稱,直到最終鏈結到你想要的model 為止。

'''

正向查詢按欄位,反向查詢按表名小寫用來告訴orm引擎join哪張表

'''

#

練習: 查詢蘋果出版社出版過的所有書籍的名字與**(一對多)

#正向查詢 按欄位:publish

queryresult=book.objects

.filter(publish__name="

蘋果出版社")

.values_list(

"title

","price")

#反向查詢 按表名:book

queryresult=publish.objects

.filter(name="

蘋果出版社")

.values_list(

"book__title

","book__price

")

#

練習: 查詢alex出過的所有書籍的名字(多對多)

#正向查詢 按欄位:authors:

queryresult=book.objects

.filter(authors__name="

yuan")

.values_list(

"title")

#反向查詢 按表名:book

queryresult=author.objects

.filter(name="

yuan")

.values_list(

"book__title

","book__price

")

#

查詢alex的手機號

#正向查詢

ret=author.objects.filter(name="

alex

").values("

authordetail__telephone")

#反向查詢

ret=authordetail.objects.filter(author__name="

alex

").values("

telephone

")

#

練習: 查詢人民出版社出版過的所有書籍的名字以及作者的姓名

#正向查詢

queryresult=book.objects

.filter(publish__name="

人民出版社")

.values_list(

"title

","authors__name")

#反向查詢

queryresult=publish.objects

.filter(name="

人民出版社")

.values_list(

"book__title

","book__authors__age

","book__authors__name")

#練習: 手機號以151開頭的作者出版過的所有書籍名稱以及出版社名稱

#方式1:

queryresult=book.objects

.filter(authors__authordetail__telephone__regex="

151"

)            .values_list(

"title

","publish__name")

#方式2:

ret=author.objects

.filter(authordetail__telephone__startswith="

151"

) .values(

"book__title

","book__publish__name

")

反向查詢時,如果定義了related_name ,則用related_name替換表名,例如:

publish = foreignkey(blog, related_name='

booklist

')

#

練習: 查詢人民出版社出版過的所有書籍的名字與**(一對多)# 反向查詢 不再按表名:book,而是related_name:booklist

queryresult=publish.objects

.filter(name="

人民出版社")

.values_list(

"booklist__title

","booklist__price

")

ORM多表操作 之 基於雙下劃線的跨表查詢

目錄 1.基於雙下劃線 2.模型介紹 3.模型建立 4.新增資料 5.例項演示 一對多多對多 一對一高階練習 基於雙下劃線的跨表查詢也就是sql中的join 連表 查詢 django 提供了一種直觀而高效的方式在查詢 lookups 中表示關聯關係,它能自動確認 sql join 聯絡。要做跨關係查...

神奇的雙下劃線查詢

神奇的雙下劃線查詢 1 年齡大於35歲的資料 res models.user.objects.filter age gt 35 print res 2 年齡小於35歲的資料 res models.user.objects.filter age lt 35 print res 大於等於 小於等於 re...

Python單下劃線和雙下劃線

python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...