練習 - 使用資料
我們在建立模型時,也建立了一個 API,可以用於存取資料庫中的資料。 此 API 可讓我們建立、擷取、更新及刪除資料庫中的物件。
現在讓我們使用所建立的模型來探索此 API。
設定互動式殼層
Django 包含互動式殼層,可讓您在 Django 環境中執行 Python 程式碼。
選取 [檢視] > [終端],以返回 Visual Studio Code 中的終端。
輸入下列命令,以啟動殼層:
python manage.py shell
從
dog_shelters
內部的models
匯入模型:from dog_shelters.models import Shelter, Dog
建立及修改物件
因為我們的模型是 Python 類別,所以我們會使用建立物件時所使用的相同語法來建立新的執行個體。 因為這些執行個體從 Django.models.Model
繼承而來,所以也會繼承 Django ORM 的功能。 該功能包含我們用來將物件儲存至資料庫的 save
。
在殼層中執行下列 Python 命令,以建立新的收容所:
shelter = Shelter(name="Demo shelter", location="Seattle, WA") shelter.save()
save
部分會將物件寫入資料庫。 因為我們是從頭開始建立,所以該命令會在資料庫中執行INSERT
陳述式。設定
location
欄位,然後呼叫save
,將收容所的位置更新為華盛頓州雷德蒙德市:shelter.location = "Redmond, WA" shelter.save()
此命令會發出
UPDATE
陳述式,以更新資料庫中的值。在殼層中執行下列 Python 命令,為收容所建立兩隻新的流浪狗:
Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save() Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
與先前相同,
save
會將流浪狗插入。 請注意我們如何將shelter
參數設定為先前建立的shelter
物件。 Django 會自動設定資料庫中的關聯性。另請注意,我們並未為每個
Dog
執行個體設定區域變數。 因為我們不會重複使用物件,所以不需要將執行個體設定為變數。
擷取物件
為了從資料庫擷取物件,Django 會為所有 Model
類別提供 objects
屬性。 objects
屬性提供多個函式,包括 all
、filter
與 get
。
執行下列命令,以擷取「範例收容所」中的所有流浪狗:
shelter.dog_set.all()
dog_set
部分會儲存特定收容所中所有流浪狗的清單。 Django 會傳回QuerySet
物件,其中包含我們所建立的兩隻流浪狗。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
使用
get
擷取第二隻流浪狗,如下列命令所示:Dog.objects.get(pk=1)
get
函式只會傳回一個物件。 您可以將參數傳入get
,以提供查詢字串。 在這裡,我們會使用pk
,其是用來表示主索引鍵的特殊關鍵字。 傳回的結果將會是 Sammy。<Dog: Sammy>
使用
filter
在「範例收容所」中擷取所有流浪狗,如下列命令所示:Dog.objects.filter(shelter__name='Demo shelter')
一如
get
,filter
也能夠讓我們在參數中傳遞查詢。 請注意,我們可以連續使用兩條底線 (__
) 在屬性之間移動。 因為我們想要在名為「範例收容所」的收容所中尋找所有流浪狗,所以我們要使用shelter__name
來存取shelter
的name
屬性。 因為我們只有一間收容所,所以傳回的結果會是所有流浪狗。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
關閉殼層
當您完成對物件的練習之後,您可以執行 exit()
命令來關閉殼層。
摘要
您現在已經了解如何透過 Django ORM,以程式設計方式處理 Django 中的資料。