演習 - データを操作する
モデルを作成すると、データベース内のデータにアクセスするために使用できる 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 コマンドを実行して、シェルター用に 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
プロパティでは、all
、filter
、get
などの複数の関数が提供されます。
次のコマンドを実行して、"デモ シェルター" のすべての犬を取得します。
shelter.dog_set.all()
dog_set
部分には、特定のシェルターのすべての犬の一覧が格納されます。 Django によって、作成した 2 匹の犬を持つQuerySet
オブジェクトが返されます。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
次のコマンドに示すように、
get
を使用して 2 番目の犬を取得します。Dog.objects.get(pk=1)
get
関数では、1 つのオブジェクトのみが返されます。 クエリ文字列を指定するために、get
にパラメーターを渡すことができます。 ここでは、主キーを示す特殊なキーワードであるpk
を使用します。 返される結果は Sammy になります。<Dog: Sammy>
次のコマンドに示すように、
filter
を使用して、Demo shelter のすべての犬を取得します。Dog.objects.filter(shelter__name='Demo shelter')
get
と同様に、filter
を使用するとパラメーターでクエリを渡すことができます。 2 つのアンダースコア (__
) を使用して、プロパティからプロパティにアクセスできることがわかります。 Demo shelter という名前のシェルターにいるすべての犬を検索したいため、shelter__name
を使用して、shelter
のname
プロパティにアクセスします。 1 つのシェルターしかないため、返される結果はすべての犬になります。<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
シェルを閉じる
オブジェクトの操作が完了したら、exit()
コマンドを実行してシェルを閉じることができます。
まとめ
これで、Django ORM を通じて Django のデータをプログラムで操作する方法がわかりました。