学習目標
前回は、管理画面(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ページに一覧表示する方法を学習していきます。