Django のテーブルの定義は models.py で!

記事
IT・テクノロジー

Django のテーブルの定義は models.py で!

Django のフレームワークを使って SQL のデータベースをやり取りする場合、直接 SQL を書かなくてもやり取りできるのが便利な点の一つです。「モデル(models)」という形でデータベースのテーブルを管理しています。 今日は、Django のモデルについての簡単な紹介です。

Django のモデルとは?

Django のモデルを一言で言うならば、どんなテーブルを使うか(作るか)を決めている仕組みです。

Django のプロジェクトの下に「アプリ」を作ると、基本的なファイルが一緒に作成されます。 以前の投稿で Django のインストールと設定を紹介した記事では、「Hello World!」を返すアプリを例に挙げて紹介しました。今回はそのプロジェクトでデータベースを使う準備をしてみます。

作成したアプリのフォルダ、helloworld アプリの場合、「helloworld」と言うフォルダの下にファイルが作成されていますが、その中の一つ「models.py」がこのモデルを設定するための、Python のソースコードになります。

標準設定では、models.py の中身はほぼ空のファイルです。

from django.db import models

# Create your models here
こんな感じのファイルになっています。

このファイルにユーザーを登録するテーブルのモデルを作成する例を紹介します。

アプリの登録
作業を始める前に、Djang のプロジェクトに作成したアプリを登録します。

プロジェクトのフォルダにある「settings.py」を変更します。 「INSTALL_APP」の最後に作成したアプリの、「helloworld」を追加します。これで Django が作成したアプリケーションを認識できるようになります。

...
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'helloworld'
]
...
「ユーザ(User)」モデルの作成
次に、models.py に新たに作成する SQL のテーブル、「User」に相当するモデルを作成します。 今回は簡単な例なので、「name」だけをエントリーとして持つシンプルなテーブルにします。

モデルの例は以下のようになります。

from django.db import models

class User(models.Model):
    """ User """
    name = models.CharField(max_length=20,help_text="Enger user name")

    def __str__(self):
        """ String for a user object """
        return self.name
Python のクラス「User」を作って、「name」と言う文字列のフィールドを変数として定義するだけです。 一つ、「str()」と言うメソッドも作成して起きます。これは、SQL のテーブルのエントリ(行)のラベルのような物で、今回は登録されている名前をそのエントリーのラベルとして利用できるようにしています。

ここでは明示的に作成していませんが、モデルで「プライマリキー(Primary key)」と呼ばれるテーブルで固有なフィールド(この場合変数)を指定していない場合、Django が自動的に固有の「id」と言う整数値を割り当てるようになっています。

一応これだけで、新たな SQL のデータベースのテーブルが用意されます。

モデルを有効にするには?
Django で新たにモデルを作成したりなど、データベースに変更を加えた場合は、変更を有効にするための処理が必要です。「マイグレーション」と呼ばれる処理を行うと変更が有効になります。

Django のプロジェクトのフォルダ(manage.py)があるフォルダで、以下のコマンドを実行します

> python manage.py makemigrations
> python manage.py migrate. 

これで、Django のプロジェクトの変更した、Django のデータベースの設定が有効になります。

Database の確認方法は?

設定を有効にした場合には、設定が有効になったかどうかを確認する必要があります。 今回は、標準設定で利用可能な「SQLite」と言うデータベースを利用しているので、コマンドラインから確認する事ができます。

データベースは、プロジェクトフォルダ(manage.py があるフォルダ)に、「db.sqlite3」と言うファイルが作られているかと思いますが、これがデータベースのファイルです。

プロジェクトフォルダないで以下のコマンドを実行すると、コマンドラインからデータベースにアクセスが可能になります。

> sqlite3 db.sqlite3

これで、SQLite のコマンドラインアクセスが可能になります。プロンプトが「sqlite> 」に変わります。

データベースのテーブルの一覧は

sqlite> .tables

で見ることができます。どのようなテーブルかは、先ほど作成した「User」のテーブルの場合

salite> .schema helloworld_user

で参照が可能です。

SQL のコマンドを使えば、データベースにデータを追加したり削除したり更新したりすることも可能です。

SQLiteBrowser を使う

標準のコマンドラインを使えば SQL のデータベースに直接アクセスができるので、データベースの状況を確認できますが、コマンドラインだと慣れないといろいろ面倒です。そこで、便利なアプリが「SQLiteBrowser」と言う GUI ベースのアプリです。

このアプリを使うと、ウインドウベースのアプリで SQLite のデータベースの管理が可能です。こちらの方が開発をスムーズに勧められるので利用されることをお勧めします。

アプリはインターネットのサイトから無料でダウンロードできます。

Windows10 の場合は、インストーラをダウンロードしてインストールするだけです。 Ubuntu の場合は

$ sudo apt-get update
$ sudo apt-get install sqlitebrowser
でインストール可能です。

このアプリを使えば、簡単にデータベースの中身を参照できますし、SQL のコマンドを送ってデータベースの操作も可能です。

実際の操作は、Python のプログラムで行うので実際にデータベースをいじることは少ないと思いますが、データの様子を見るのはテストやデバッグでは必要です。

必要な操作は Python のプログラムでできる!
データベースの操作は、モデルが Python のクラスで記述されているので、クラスにメソッドを実装することでデータベースのアクセス、操作が可能です。Python のプログラムから直接 SQL を書いての操作は必要ないので、データベース関連の操作がシンプルになるので、プログラムが描きやすいようになっています。

必要なテーブルは、モデルでクラスを作って、必要な操作はメソッドで!クラスをインポートすれば他のもジュルからもアクセスできるので、Python さえマスターできれば、アプリの開発はスムーズに行えます。

Python のデバッグツールも利用できるので、デバッグは結構楽にできます。

開発環境としては、VSCODE のプラグインを活用したり、Python の IDE である PyCharm などを利用すると効率的に開発が可能です。

まとめ
Django で SQL を使うのは簡単です。 アプリの models.py で SQL データベースのテーブルを Python のクラスとして書けばあとは、Django が面倒をみてくれます。実際のデータベースのアクセスと操作は SQL をプログラムで記述しなくても、全て Python のコードで実装できるので、コーディングはシンプルにできます。

データベースの中身の確認はコマンドラインから標準データベースの SQLite にアクセスできますが、GUI ベースのアプリの「SQLiteBrowser」を活用した方が使いやすく便利です。

既存の Python 開発環境も利用できるので、Django による Web 開発は効率的に勧めやすい環境が整っています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す