Django ORMクエリ入門|部分一致検索・前方一致・後方一致を初心者向けにやさしく解説
生徒
「Djangoで、名前の一部だけでデータを探すことってできますか?」
先生
「できますよ。Django ORMには、部分一致検索や前方一致、後方一致という便利な検索方法があります。」
生徒
「パソコンをあまり触ったことがなくても理解できますか?」
先生
「大丈夫です。住所録や本棚を探すイメージで、順番に説明していきます。」
1. Django ORMとは何かを超かんたんに説明
Django ORMとは、データベースという「情報をしまっておく箱」を、Pythonの言葉で操作できる仕組みです。普通はデータベースを操作するために難しい専用の言葉が必要ですが、Django ORMを使うと、普段書いているPythonの文で検索や保存ができます。
たとえば「名前が田中の人を探したい」というとき、ORMを使えば「田中」という文字を条件にしてデータを取り出せます。これがDjango ORMクエリ入門の大切な考え方です。
2. 部分一致検索とは?日常生活でたとえると
部分一致検索とは、文字の一部が合っていれば見つけてくれる検索方法です。本棚で「Python」という文字がタイトルに少しでも入っている本を全部探すようなイメージです。
Django ORMでは、icontainsという指定を使います。英語が出てきましたが、「contains」は「含む」という意味で、「i」は大文字と小文字を気にしない、という合図です。
from app.models import Book
books = Book.objects.filter(title__icontains="python")
この例では、タイトルに「python」という文字が少しでも入っているデータをすべて探しています。
3. 前方一致検索の考え方と使いどころ
前方一致検索は、「最初の文字が同じもの」を探す方法です。電話帳で「さ行」から始まる名前を探す感覚に近いです。
Django ORMでは、startswithを使います。これは「〜で始まる」という意味です。
from app.models import User
users = User.objects.filter(username__startswith="tanaka")
このコードは、ユーザー名が「tanaka」から始まる人を探しています。入力補助や検索フォームでよく使われます。
4. 後方一致検索とは?名前の終わりで探す
後方一致検索は、「最後の文字が同じもの」を見つける方法です。たとえば、メールアドレスが「.jp」で終わるものだけを探すようなイメージです。
Django ORMでは、endswithを使います。
from app.models import Customer
customers = Customer.objects.filter(email__endswith=".jp")
この例では、日本向けのメールアドレスだけを検索しています。
5. 大文字と小文字を区別しない検索のポイント
検索するときに、「Python」と「python」を同じものとして扱いたい場合があります。そんなときは、先ほどのように「i」が付いた指定を使います。
たとえば前方一致でも、大文字小文字を気にしない場合は、次のように書けます。
from app.models import Product
products = Product.objects.filter(name__istartswith="apple")
これで、「Apple」でも「apple」でも検索に引っかかるようになります。
6. 部分一致・前方一致・後方一致の使い分け
どの検索方法を使うかは、目的で決まります。あいまいに探したいなら部分一致、入力の最初を重視するなら前方一致、決まった終わり方があるなら後方一致が向いています。
Django ORMクエリ入門では、「何を基準に探したいか」を考えることが大切です。これは初心者の方が最初につまずきやすいポイントですが、例えで考えると理解しやすくなります。
7. 初心者がよく間違えるポイント
よくある間違いは、アンダースコアの数を間違えることです。Django ORMでは、「フィールド名__条件」という形で、アンダースコアを2つ続けて書きます。
また、検索結果はすぐに画面に表示されるわけではなく、「条件に合ったデータの集まり」が返ってくる、という点も重要です。
8. Django ORM検索を覚えるメリット
Django ORMで部分一致検索や前方一致検索、後方一致検索を使えるようになると、Webアプリの使いやすさが一気に上がります。
検索ボックスや絞り込み機能を作るときに必須の知識なので、Django初心者・Python初心者・プログラミング未経験者の方も、ここはじっくり理解しておきたいポイントです。