演習 - データを操作する

完了

モデルを作成すると、データベース内のデータにアクセスするために使用できる 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 コマンドを実行して、シェルター用に 2 匹の新しい犬を作成します。

    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 によって、作成した 2 匹の犬を持つ QuerySet オブジェクトが返されます。

    <QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
    
  2. 次のコマンドに示すように、get を使用して 2 番目の犬を取得します。

    Dog.objects.get(pk=1)
    

    get 関数では、1 つのオブジェクトのみが返されます。 クエリ文字列を指定するために、get にパラメーターを渡すことができます。 ここでは、主キーを示す特殊なキーワードである pk を使用します。 返される結果は Sammy になります。

    <Dog: Sammy>
    
  3. 次のコマンドに示すように、filter を使用して、Demo shelter のすべての犬を取得します。

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

    get と同様に、filter を使用するとパラメーターでクエリを渡すことができます。 2 つのアンダースコア (__) を使用して、プロパティからプロパティにアクセスできることがわかります。 Demo shelter という名前のシェルターにいるすべての犬を検索したいため、shelter__name を使用して、sheltername プロパティにアクセスします。 1 つのシェルターしかないため、返される結果はすべての犬になります。

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

シェルを閉じる

オブジェクトの操作が完了したら、exit() コマンドを実行してシェルを閉じることができます。

まとめ

これで、Django ORM を通じて Django のデータをプログラムで操作する方法がわかりました。