數據庫查詢中的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,也可以是其他的字段名,具體就看自己數據庫模型的定義了。