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 開発は効率的に勧めやすい環境が整っています。