class
city
(models.model)
: city_name = models.charfield(verbose_name=
'城市名',max_length=20)
def__unicode__
(self)
:return self.city_name
class
author
(models.model)
; name = models.charfield(verbose_name=
'作者'
, max_length=10)
living = models.foreignkey(city)
def__unicode__
(self)
:return self.name
class
book
(models.model)
: author = models.foreignkey(author, related_name=
'author_book'
) title = models.charfield(verbose_name=
'書名'
, max_length=10)
pubtime = models.datefield(verbose_name=
'出版時間'
)def
__unicode__
(self)
:return self.title
related_name屬性
查詢作者下的所有書籍
author = author.objects.
filter
(name=
"金庸"
)book = author.book_set.
all(
)# 子表name+_set()
person.author_books.
all(
)
select_related函式 >> select_related官方文件解釋
查詢某本書籍的一系列資訊
book = book.objects.
filter
(title=
'雪中悍刀行'
)# title,pubtime
author = book.author # name
city = author.living # city_name
books = book.objects.select_related(author_living)
.filter
(title=
'雪中悍刀行'
)
select_related在查詢中,執行的sql語句使用了join的方法,通過一次查詢獲得所有結果
未指定的外來鍵不會新增到查詢結果中
不指定外來鍵會查詢次數會根據外來鍵的數量與deep的增加而增加
所以select_related主要針一對一和多對一關係進行優化。
可以通過可變長引數指定需要select_related的欄位名。也可以通過使用雙下劃線「__」連線欄位名來實現指定的遞迴查詢。沒有指定的字段不會快取,沒有指定的深度不會快取,如果要訪問的話django會再次進行sql查詢。
也可以通過depth引數指定遞迴的深度,django會自動快取指定深度內所有的字段。如果要訪問指定深度外的字段,django會再次進行sql查詢。
也接受無引數的呼叫,django會盡可能深的遞迴查詢所有的字段。但注意有django遞迴的限制和效能的浪費
~django >= 1.7,鏈式呼叫的select_related相當於使用可變長引數。django < 1.7,鏈式呼叫會導致前邊的select_related失效,只保留最後乙個~
prefetch_related函式 >> prefetch_related官方文件解釋
查詢是18年以後發表的書的資訊
books = book.
object
.filter
(pubtime_gt=start_time)
# 查詢符合條件的書籍
for b in books:
book_author = b.author # 查詢書籍物件的author物件
author_city = book_author.city # 查詢author物件的city物件
start_time = datetime.datetime.strptime(
"20180101"
,"%y%m%d"
)books = book.
object
.filter
(pubtime_gt=start_time)
.prefetch_related(
'author_city'
)for b in books:
print b.author # 這裡的author不需要再次查詢資料庫
print b.city
prefetch_related與select_related的目的都是為了減少sql查詢,降低資源消耗。不同的是select_related主要針對於一對多,一對一。而prefetch_related針對於多對多,多對一。
prefetch物件對欄位指定的方式和prefetch_related中的引數相同,都是通過雙下劃線連線的欄位名完成的。
~可以通過 queryset 引數手動指定prefetch使用的queryset。~
~可以通過 to_attr 引數指定prefetch到的屬性名。~
生物資訊 related
生物資訊學的研究重點主要體現在基因組學 genomics 和蛋白質組學 proteomics 兩個方面,intron 內含子,exon外顯子 雙螺旋結構是基於對鹼基配對規律的認識 氫鍵結合只發生於互補的鹼基a與t g與c之間。雙螺旋分子兩條鏈的嚴格互補性,是指一條鏈的核苷酸順序,無例外地取決於另一條...
關於Django的contenttypes資料遷移
在使用django開發過程中遇到乙個問題,在使用了contenttype genericforeignkey genericrelation等模組時,如果要使用dumpdata遷移資料,你可能會發現,資料庫中django content type這張表中模組的id會變化,導致資料亂掉!後來發現,這個...
django 關於靜態檔案
在開發中通常會使用到css,js,img等靜態檔案,關於django如何處理以及配置還是比較糾結,其實官網中有給出詳細說明,只是剛入門者容易混,這裡記錄下配置流程。在settings.py中配置靜態檔案位置,直接給出配置 static url static static root os.path.j...