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 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...