django 小知識

數據庫查詢中的Question.objects.get(pk=1)是什麼意思?

在看某些django例子的時候,涉及到django的數據庫模型映射,總會有這麼一些代碼

# 關鍵字參數
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

# 或者直接這樣
Question.objects.get(pk=1)

這裏的pk是什麼意思呢?

查看django的文檔發現,pk其實就是primary key的縮寫

django的模型創建的時候,會自動在數據庫寫入一個自增的id字段,這個字段並不需要顯示地寫在模型裏面,和一般數據表的創建類似,由於其獨一無二性,被設置成了該表的主鍵,也就是索引

所以,上面查詢的方式其實等價於下面這種寫法

# 關鍵字參數
def detail(request, question_id):
    # question = get_object_or_404(Question, pk=question_id)
    question = get_object_or_404(Question, id=question_id)
    return render(request, 'polls/detail.html', {'question': question})

# 或者直接這樣
Question.objects.get(id=1)

不過需要注意的是,當設置了其他的主鍵,則無法進行如此的等價,一般來說,pk的定義簡化了主鍵的查詢,可以是id,也可以是其他的字段名,具體就看自己數據庫模型的定義了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章