SQLite データベースを Django でどう使うか?

記事
IT・テクノロジー

SQLite データベースを Django でどう使うか?

Django で標準設定のデータベースとして利用されている SQLite ですが、実際にシステムとして稼働する場合には置き換える場合が多くなっています。何故でしょうか?この記事では、SQLite について簡単にまとめてみました。


SQLite データベース

最初に、SQLite データベースについて簡単にまとめておきます。 プログラム開発、特に Web 系の開発で SQL データベースは利用する機会も多いですし、よく耳にする名前です。 その名の通りデータベースの一種ですが、「SQL(Structured Query Language)」を使ってアクセスするデータベースです。SQL は一種のプログラミング言語のようなものですが、データベースとデータをやり取りする際に使われます。データを追加、更新、削除を行うための記述ですが、かなり複雑なデータの扱い方もできます。

代表的な SQL データベースには、MySQL、PostgreSQL、Microsoft SQL Server、そして今回取り上げている SQLite などが挙げられます。

その中で、SQLite はその名の通り、「軽量」のデータベースとして Django などでも標準設定になっています。

Django で標準設定になっていますが、多くの Django アプリをインターネットに公開して実際に稼働させる際には別の SQL データベースに置き換えることが多いのは以前の記事で紹介した通りです。

何故 Django で標準設定になっているか?

公開する際には置き換えることが多いのに何故標準設定になっているのでしょうか? 気になるところですが、本当の理由はよくわかりません。 しかし、SQLite の利点や欠点を考えると、恐らくこんな理由だろうと言うのは推測ができます。

恐らく 1 番の理由は「設定が簡単」だからではないかと思います。

他の SQL データベースでは、「データベースのユーザー」が必要で、実際に利用する際には、「データベースのユーザー」を作成したり、「データベース」を作成する必要があります。「データベース」を作成というと何か変な感じがします。「MySQL」とか「PostgreSQL」はデータベースじゃないの?と思いますよね?これらは、実際はデータベース管理システムで、実際は、データを入れる「入れ物」を作る必要があります。これが、ここで言う「データベース」です。SQLite 以外の SQL データベースでは、一つの管理システムで複数の「入れ物(データベース)」を作成して管理できます。ところが、SQLite では、ユーザもデータベースもありません。

基本的に、1つのプロジェクトに一つのファイルを割り当ててその中にテーブルを作成する感じで管理しています。ユーザーの概念もなく、シンプルです。

従って、プロジェクトの作成と同時に、「データベース」の仕組みを簡単に準備できるので便利ということです。

開発には都合が良い!

SQL のデータベースは、基本的なデータベースのアクセスは共通の言語である SQL を利用するので置き換えが簡単なので開発と実際の運用は別のデータベースを利用できます。 実際は、データベース(の管理システム)間では微妙に違う部分もありますし、完全に同じではありませんが、Django の場合 ORM(Object Relational Mapping)を採用していて、Python のクラスを介してデータベースを定義・アクセスする方式をとっているので、Python のプログラムからは、データベースの違いが見えないように工夫しています。データベースによる違いは「裏方」のデータベースにアクセスする部分を入れ替える仕組みを作ってアプリからは同じプログラムで対応できるようにしています。

つまり、Django のフレームワークを利用する場合開発時は「簡単に設定」できて、後から本格的なデータベースへの移行を考慮した設計になっているので、SQLite の良いところを上手く利用していると言うことです。

初期設定時に、データベースの作成やユーザーの作成が不要で簡単に設定できるという利点を生かして、実際の運用の際には同じプログラムで利用できるようにして、入れ替えを可能にしています。

SQLite の欠点は?

SQLite の利点は、大体お分かりかと思いますが、

* シンプル
* 簡単な設定
* SQLite Browser など便利なツールがある
などが、主な利点ですが、もちろん苦手な部分、つまり欠点もあります。

シンプルにしている分、大量のデータを扱う場合、特に一度に多くのデータを扱うのが苦手です。 特に、書き込みは、データベースの実態がファイルなので、同時書き込みは基本的にできません。 また、ファイルベースなのでネットワークを介したアクセスもできません。

しかし、開発時には、多くのデータを書くことは考えられますが、アクセスする利用者(ユーザー)は限定的なので大量のデータを同時に処理するケースはそうしたストレステスト時以外は余り発生することはありません。同時に書き込む可能性も限定的ですので、開発時には大きな問題にはなりません。

開発時には、ネットワークを介してのデータベースアクセスもほぼ必要がないので、SQLite は開発には都合が良いことの方が多いと言えます。

このあたりが、標準設定で SQLite を利用する大きな理由だと考えられます。

まとめ
SQLite は、Django の標準設定の SQL データベースとして使われていますが、これは、開発時には SQLite の欠点が殆ど問題にならない場合が多いのが大きな理由ではないかと言えます。 欠点を避けて、便利なシンプルな設定など、使いやすさを利用することで開発効率がよくなるように上手く考えられています。SQLite Browser を利用すれば、データベースの中身を簡単に確認できるので、検証やデバッグ時には重宝します。

Django の場合、データベースの設定は、プロジェクトフォルダの「settings.py」のデータベースの部分を置き換えるだけで、コード上は変更を加える必要がないので、実際に公開してアプリやサービスを稼働させる際は、本格的な SQL のデータベース(管理システム)に入れ替えるのも簡単にできるのは大きな魅力です。

最初から、本格的なデータベース(管理システム)を使うのも一つの選択肢ですが、SQLite を上手く利用して、基本機能を実装してしまう手法の方が開発効率が高くなる場合が多いと言えます!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す