Skip to content
Code Blue プログラミング学習ノート
Python/Django

Django ORM – データベース操作

学習目標

前回は、管理画面(Admin)を利用してTodoデータを登録する方法を学習しました。今回は、登録したデータをPythonから操作する方法を学習します。Djangoでは、データベースを直接SQLで操作するのではなく、**ORM(Object Relational Mapping)**という仕組みを利用します。

ORMを使うことで、Pythonのコードだけでデータの取得や追加、更新、削除を簡単に行うことができます。今回は、Todoモデルを利用して、基本的なORMの操作方法を学習します。

ORMとは

ORM(Object Relational Mapping)とは、Pythonのオブジェクトとしてデータベースを操作できる仕組みです。

通常、データベースを操作するにはSQLという言語を使用します。例えば、データを取得する場合はSQLでは次のように記述します。

SELECT * FROM todo;

これは一般的なSQL文です。しかし、DjangoではSQLを書く必要はありません。代わりに、Djangoに備わっているメソッドを利用してデータベースを操作します。上記のSELECT文に対応したORMは以下の通りです。

Todo.objects.all()

上記のようにメソッドチェーンのようなPythonコードでデータベースを操作できます。ORMが内部でSQLへ変換して実行してくれるため、開発者はPythonだけでデータベースを扱うことができます。

ORMメソッド

ではORMで用意されているメソッドについて詳細に書いていきます。

.objects.all()

データベースに登録されているすべてのデータを取得するには、以下のように all() メソッドを利用します。

Todo.objects.all()

このメソッドは、Todoテーブルに登録されているすべてのデータを取得します。

例えば、次のように「買い物」「レポート提出」「部屋の掃除」という3件のTodoが登録されていれば、3件すべて取得できます。一覧画面を作成するときによく利用するメソッドです。

filter()

条件に一致するデータだけ取得したい場合は、以下のfilter()メソッドを利用します。

Todo.objects.filter(completed=False)

この場合は、完了していないTodoだけを取得します。completedフィールドの値がFalseであるデータを条件に検索しています。また、以下のように、タイトルを指定して検索することもできます。

Todo.objects.filter(title="買い物")

この場合は、タイトルが「買い物」と一致するTodoだけを取得します。titleフィールドの値を条件に検索しています。filter()は条件に一致するデータをすべて取得するため、結果が0件の場合もあれば、複数件になる場合もあります。

get()

1件だけ取得したい場合は、以下のようにget()メソッドを利用します。

Todo.objects.get(id=1)

上記の例ではIDが1のTodoを取得できます。get()は、必ず1件だけ取得したい場合に利用します。ただし、データが存在しない、や、複数件見つかったという場合はエラーになります。そのため、一意に決まるデータを取得するときに使用します。

create()

新しいデータを登録するには、以下のようにcreate()メソッドを利用します。

Todo.objects.create(
    title="買い物",
    content="牛乳を買う",
    deadline="2026-07-20",
    completed=False
)

create()を実行すると、データベースへ新しいTodoが登録されます。インスタンスの作成と保存を一度に行えるため、新規登録でよく利用されるメソッドです。

save()

既存のデータを変更した後は、以下のようにsave()メソッドを実行します。

todo = Todo.objects.get(id=1)
todo.completed = True
todo.save() # データベースを更新します

save()メソッドを実行すると、completed(完了フラグ)がTrueに更新されます。

save()は、変更内容をデータベースへ保存するためのメソッドです。また、新しいModelオブジェクト(例ではtodo)を作成した後にsave()を呼び出すことで、新規データとして登録することもできます。

create()save()は、どちらもデータベースへデータを保存するためのメソッドですが、使う場面が異なります。新しいデータを簡単に登録するならcreate()、データを変更して保存するならsave()と覚えておくと理解しやすいでしょう。

delete()

データを削除するには、以下のようにdelete()メソッドを使用します。

todo.delete()

例えば、id=1のレコードを削除する場合は以下のようにget()メソッドと併用します。

todo = Todo.objects.get(id=1)
todo.delete()

とすると、id=1のレコードがTodoがデータベースから削除されます。削除したデータは元に戻せないため、実際のアプリケーションでは確認画面を表示することや論理削除(レコードには残るがデータとして取り扱わない)が一般的です。

order_by()

データを並び替えて取得するには、以下のようにorder_by()メソッドを利用します。

Todo.objects.order_by("deadline")

この場合は、期限が早い順に取得します。逆順にしたい場合は、order_by()メソッドの引数に("-")を追加して実行します。例では"-deadline"を降順します。

Todo.objects.order_by("-deadline")

先頭に-を付けると降順になります。よく使用される並び替えには、作成日時順・更新日時順・名前順・期限順などがあります。

ORMの基本操作

今回学習したORMの基本操作をまとめると、次のようになります。

メソッド内容
objects.all()全件取得
filter()条件検索
get()1件取得
create()新規登録
save()保存・更新
delete()削除
order_by()並び替え

これらはDjangoで最もよく利用するORMの基本操作です。

実際のWebアプリケーションでも、ほとんどのデータ操作はこれらのメソッドを組み合わせて実現しています。

まとめ

Djangoでは、**ORM(Object-Relational Mapping)**を利用することで、SQLを書かなくてもPythonだけでデータベースを操作できます。例えば、**objects.all()**はすべてのデータを取得し、**filter()**は条件に一致するデータ、**get()**は1件のデータを取得します。

また、**create()で新しいデータを登録し、データを変更した後はsave()で保存します。不要になったデータはdelete()**で削除でき、**order_by()**を使うと取得したデータを指定した順番に並び替えられます。これらのメソッドを活用することで、データベースを効率よく操作できます。

    ここまでで、Todoデータの取得・追加・更新・削除といった基本的なデータ操作を行えるようになりました。次回は、このORMで取得したデータをViewからTemplateへ渡し、Webページに一覧表示する方法を学習していきます。