はじめてのDjango~「DjangoでのDB操作」ORMでのCRUD操作編

この記事は以下のターゲットを対象としています。

★5 Django の開発経験が 3 年以上。
★4 Django の開発経験が 1 年以上。
★3 WEB サイト開発経験あり。これから Django を学習します。
★2 Python 初級者。簡単なプログラムコードが書けます。
★1 プログラミング未経験。

こんにちは、グローバルウェイの大坪です。

前回のコラムではDjangoのマイグレーション機能についてお伝えしましたが、今回はDjangoの魅力の一つであるORM(Object-Relational Mapping)を使ったCURD操作をご紹介します。

前回のブログはこちら(https://gw-python.com/archives/149)

目次

〔ORM(Object-Relational Mapping)とは?〕

Djangoでは、データベースのテーブルとPythonのクラスを紐づける仕組みとしてORMが利用されています。これにより、SQL文を直接書かずにPythonコードを使ってデータベースの操作が可能です。

〔CRUDとは?〕

CRUDは、データベースの基本的な操作を指し、以下の4つの操作からなります。

  • C(Create): データの新規作成
  • R(Read): データの取得
  • U(Update): データの更新
  • D(Delete): データの削除

〔Create(作成)〕

DjangoのORMを使用して新しいデータをデータベースに作成するには、以下の手順を踏みます。

【python】
from blog.models import Blog
 
# モデルの新しいインスタンスを作成
new_blog = Blog(title=’はじめてのDjango’, content=’Djangoの魅力に迫る’)
 
# データベースに新しいレコードを作成
new_blog.save()

ここのコードでは、Blog モデルの新しいインスタンスを作成し、save メソッドを呼び出すことでデータベースに保存しています。生成されるSQL文は以下のような形になります。

【SQL】
INSERT
INTO blog_blog(title, content)
VALUES (‘はじめてのDjango’, ‘Djangoの魅力に迫る’);

〔Read(取得)〕

データの取得は、検索クエリを使用して行います。Djangoにおいて、主に使用されるメソッドとして filter と get があります。これらの違いについて詳しく見ていきましょう。

filter メソッドは、指定された条件に合致する複数のレコードを取得します。例えば、タイトルに「Django」が含まれる記事を取得する場合は次のようになります。

【python】
from blog.models import Blog
 
# タイトルに「Django」が含まれる記事を取得
django_blogs = Blog.objects.filter(title__contains=’Django’)

この例では、Blog モデルから title に「Django」を含む記事を取得しています。filter メソッドは条件に合致する複数の結果を返す可能性があります。生成されるSQL文は以下のような形になります。

【SQL】
SELECT
    *
FROM
    blog_blog
WHERE
    title LIKE ‘%Django%’;

get メソッドは、指定された条件に合致する一意のレコードを取得します。例えば、タイトルが「はじめてのDjango」の記事を取得する場合は次のようになります。

【python】
from blog.models import Blog
 
# タイトルが「はじめてのDjango」の記事を取得
blog = Blog.objects.get(title=’はじめてのDjango’)

生成されるSQL文は以下のような形になります。

【SQL】
SELECT
    *
FROM
     blog _blog
WHERE
    title = ‘はじめてのDjango’;

get メソッドは条件に合致するレコードが存在しない場合や複数存在する場合には DoesNotExist または MultipleObjectsReturned の例外が発生します。

どちらを使用するかは、取得したいデータが一意であるか複数存在するかによります。一意のデータを取得する場合は get メソッドが便利ですが、複数のデータを取得する場合は filter メソッドを使用すると良いでしょう。

〔Update(更新)〕

既存のデータを更新するには、まず対象のデータを取得し、その後変更を加えて保存します。

【python】
from blog.models import Blog
 
# タイトルが「はじめてのDjango」の記事を取得
blog_to_update = Blog.objects.get(title=’はじめてのDjango’)
 
# 記事の内容を更新
blog_to_update.content = ‘Djangoの基本的な使い方を学びます’
 
# 更新内容をデータベースに保存
blog_to_update.save()

生成されるSQL文は以下のような形になります。

【SQL】
UPDATE blog_blog
SET
    content = ‘Djangoの基本的な使い方を学びます’
WHERE
    title = ‘はじめてのDjango’;

〔Delete(削除)〕

データの削除を行うには、対象のデータを取得してから delete メソッドを呼び出します。

【python】
from blog.models import Blog
 
# タイトルが「はじめてのDjango」の記事を取得して削除
blog_to_delete = Blog.objects.get(title=’はじめてのDjango’)
blog_to_delete.delete()

生成されるSQL文は以下のような形になります。

【SQL】 DELETE
FROM
    myapp_blog
WHERE
    title = ‘はじめてのDjango’;  

〔まとめ〕

ORMを用いるとSQL文を書く手間が省け、直感的で分かりやすいコードを書くことができます。次回は、Djangoのクラスベースビューについて紹介したいと思います。

この記事が気に入ったら
いいね または フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!
目次