練習 - 使用資料

已完成

我們在建立模型時,也建立了一個 API,可以用於存取資料庫中的資料。 此 API 可讓我們建立、擷取、更新及刪除資料庫中的物件。

現在讓我們使用所建立的模型來探索此 API。

設定互動式殼層

Django 包含互動式殼層,可讓您在 Django 環境中執行 Python 程式碼。

  1. 選取 [檢視] > [終端],以返回 Visual Studio Code 中的終端。

  2. 輸入下列命令,以啟動殼層:

    python manage.py shell
    
  3. dog_shelters 內部的 models 匯入模型:

    from dog_shelters.models import Shelter, Dog
    

建立及修改物件

因為我們的模型是 Python 類別,所以我們會使用建立物件時所使用的相同語法來建立新的執行個體。 因為這些執行個體從 Django.models.Model 繼承而來,所以也會繼承 Django ORM 的功能。 該功能包含我們用來將物件儲存至資料庫的 save

  1. 在殼層中執行下列 Python 命令,以建立新的收容所:

    shelter = Shelter(name="Demo shelter", location="Seattle, WA")
    shelter.save()
    

    save 部分會將物件寫入資料庫。 因為我們是從頭開始建立,所以該命令會在資料庫中執行 INSERT 陳述式。

  2. 設定 location 欄位,然後呼叫 save,將收容所的位置更新為華盛頓州雷德蒙德市:

    shelter.location = "Redmond, WA"
    shelter.save()
    

    此命令會發出 UPDATE 陳述式,以更新資料庫中的值。

  3. 在殼層中執行下列 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 屬性提供多個函式,包括 allfilterget

  1. 執行下列命令,以擷取「範例收容所」中的所有流浪狗:

    shelter.dog_set.all()
    

    dog_set 部分會儲存特定收容所中所有流浪狗的清單。 Django 會傳回 QuerySet 物件,其中包含我們所建立的兩隻流浪狗。

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    
  2. 使用 get 擷取第二隻流浪狗,如下列命令所示:

    Dog.objects.get(pk=1)
    

    get 函式只會傳回一個物件。 您可以將參數傳入 get,以提供查詢字串。 在這裡,我們會使用 pk,其是用來表示主索引鍵的特殊關鍵字。 傳回的結果將會是 Sammy。

    <Dog: Sammy>
    
  3. 使用 filter 在「範例收容所」中擷取所有流浪狗,如下列命令所示:

    Dog.objects.filter(shelter__name='Demo shelter')
    

    一如 getfilter 也能夠讓我們在參數中傳遞查詢。 請注意,我們可以連續使用兩條底線 (__) 在屬性之間移動。 因為我們想要在名為「範例收容所」的收容所中尋找所有流浪狗,所以我們要使用 shelter__name 來存取 sheltername 屬性。 因為我們只有一間收容所,所以傳回的結果會是所有流浪狗。

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    

關閉殼層

當您完成對物件的練習之後,您可以執行 exit() 命令來關閉殼層。

摘要

您現在已經了解如何透過 Django ORM,以程式設計方式處理 Django 中的資料。