【Django】データベース操作:データを新規で追加する方法(create()とsave()の違い)

時計 2022.03.14 / 時計

【Django】データベース操作:データを新規で追加する方法(create()とsave()の違い)

本記事ではDjangoにおけるデータベース操作で、データを新規で追加する方法について解説していきます。

データベースにデータ(オブジェクト)を追加するには以下メソッドを使用する方法があります。

  • save()メソッド
  • create()メソッド

Webアプリケーションで頻繁に利用する、データベースにデータを追加する方法について見ていきましょう。

データ(フィールド)を更新する方法については以下記事をご参照ください。

Djangoのデータベース操作について

DjangoではORM(Object-Relational Mapping)と呼ばれる技法を使ってデータベース操作(新規追加・削除・更新)を行います。

簡単に説明するとmodels.pyで定義したモデルクラスを使って生成したオブジェクトに対して、メソッドを使用することでデータベース操作を行います。

基本的なORMによるデータベース操作については以下記事をご参照ください。

データベース操作:データの追加

データベースにデータを追加する方法は様々あります。ここでは私がよく使用する以下2つのメソッドについて解説していきます。

  • save()
  • create()

save()メソッドはモデルクラスオブジェクトに対して使用し、create()メソッドはQuerySetメソッドの1つです。

それぞれの使用方法を次項より解説していきます。

save()

生成したモデルオブジェクトに対してsave()を使用することで、データベースに追加することができます。

構文

Model.save(force_insert=False, force_update=False, using=DEFAULT_DB_ALIAS, update_fields=None)

単にデータベース登録するだけの場合は、save()メソッドの引数には何も指定しません。またsave()メソッドで返される値はありません。

すでに同じ値のプライマリーキーがあった場合は更新処理が行われます。

save()メソッドを使用する際に重要なのが、モデルクラスに引数(各フィールドに値)を渡してインスタンス化することです。

以下にsave()を利用したデータベースへのデータ追加のサンプルコードを記します。ここではSampleオブジェクトに対してtitle、authorフィールドに値を指定してデータ追加を行います。

from .models import Sample
def save_obj(request):
    obj = Sample(title="Django", author="Office54")
    obj.save()

Django公式サイトでは以下のようにsave()メソッドの使用法が記述されています。

>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()

>>> blog = Blog(name='トーク', tagline='チーズ')
>>> blog.id    # Noneが返されます。なぜならblogオブジェクトはidを持っていないため
>>> blog.save()
>>> blog.id     # 追加されたオブジェクトのIDが返されます

上記コードのようにモデルクラスに各フィールドに値を指定してオブジェクトを生成します。そして生成したオブジェクトに対してsave()メソッドを使用することでデータベースに追加されます。

上記コードで出てくるidとは、そのデータを識別するフィールドです。
各モデルには特別設定していない限り、デフォルトでidという名前のプライマリーキーであるAutoFieldを持ちます。

Djangoのモデルという仕組みについて詳しく学びたい方は、以下記事をご参照ください。

create()

データベースのデータ追加はQuerySetメソッドのcreate()メソッドを利用して実現することもできます。

構文

create(**kwargs)

save()メソッドとの違いとして、save()はモデルクラスから生成したオブジェクトに対して実行したのに対して、create()は以下のようにワンステップでオブジェクトの生成と追加を行います。

p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

上記コードで利用しているobjectsとは、マネージャーと呼ばれるデータベースへのクエリ操作を提供するインターフェースです。

create()に似たメソッドにget_or_create()やupdate_or_create()などもあります。これらはすでにデータが存在した場合に取得または更新するメソッドです。

フォームから送信されたデータを保存

テンプレートからフォームクラスを使ったフォームによって送信されたデータを保存する場合、以下のようにデータ保存を行います。ここではフォームクラスMemberFormを使用しています。

form = MemberForm(request.POST)
    if form.is_valid():
        form.save()

フォームクラスの引数にrequest.POSTのみを指定すると新規登録になります。

またここではsave()メソッドを使って、データベース追加を行っています。

より詳しくフォームクラスによるデータの追加や更新を知りたい方は、以下記事をご参照ください。

まとめ

本記事「【Django】データベース操作:データを新規で追加する方法(create()とsave()の違い)」はいかがでしたか。

基本的なデータベース操作を覚えて、使えるWebアプリケーションを作成しましょう。