DjangoではデフォルトでSQLite3がデータベースとして利用されています。これはデータベースごとにファイルを作成してデータを管理するものです。ですが、チーム開発等の必要性がある場合などにMySQLを使った方が勝手がいいケースは多いと思います。今回はDjangoでMySQLに接続する方法についてハンズオン形式で解説していきたいと思います。
DjangoでMySQLに接続する手順
DjangoでMySQLに接続するためには以下のようなステップを踏みます。
- mysqlclientをインストールする
- Djangoでプロジェクトを立ち上げる
- MySQLでプロジェクトで使用するデータベースを作成しておく
- setting.pyで使用するデータベースの指定をする
- migrateして動作確認をする
上記の4ステップ(正確には動作確認は必ずしも必要ないので3ステップ)でDjangoにMySQLを導入することができます。本記事ではDjangoでプロジェクトを立ち上げる方法やMySQLでデータベースを作成する方法については割愛します。Djangoでプロジェクトを立ち上げる方法については「仮想環境でDjangoをインストールしてローカルサーバーを立ち上げるまでを丁寧に解説」を参考にしてみてください。
実際にMySQLに接続してみる
それでは先ほどの手順に即して実際にDjangoでMySQLに接続してみましょう。今回使用したコードはcode-databaseのgithubリポジトリに上げてありますので手元で確認したい方は活用してみてください。
mysqlclientをインストールする
DjangoでMySQLを使用するためには両者をつなぐドライバーをインストールする必要があります。ドライバーにはPyMySQLやmysqlclientなどがありますが今回はDjangoが推奨しているmysqlclientを使用します。今回はrequirements.txtを用いてpipでインストールします。myvenvという名前の仮想環境を使用しています。仮想環境を用いたパッケージのインストールは「仮想環境の作成」を参考にしてみてください。Djangoもここでインストールしておきました。
タイトル:requirements.txt
Django~=3.0.5 mysqlclient~=1.4.6
タイトル:ターミナル
(myvenv)$ pip install -r requirements.txt
Djangoでプロジェクトを立ち上げる
Djangoでプロジェクトを立ち上げましょう。詳しい説明については「仮想環境でDjangoをインストールしてローカルサーバーを立ち上げるまでを丁寧に解説」で取り上げていますので割愛します。
タイトル:ターミナル
(myvenv)$ django-admin startproject sample_app
MySQLでプロジェクトで使用するデータベースを作成する
続いてMySQLでデータベースを準備しておきましょう。MySQLでログインしたのちcreate database
コマンドでデータベースを作成します。まずはMySQLでログインします。
タイトル:ターミナル
$ mysql -u root -p Enter password:
今回はルートユーザーとしてログインします。
タイトル:mysqlモニター
mysql> create database sample_app; Query OK, 1 row affected (0.06 sec)
create database
コマンドでsample_appという名前のデータベースを作成しました。これでデータベースが作成できました。
setting.pyで使用するデータベースの指定をする
そして、DjangoでMySQLに接続するためにsetting.pyを編集していきます。DATABASESのオプションを変更します。
タイトル:setting.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #mysqlをデータベースとして使用することを指定 'NAME': 'mydatabase', #データベース名 'USER': 'mydatabaseuser', #データベースを作成したユーザー名 'PASSWORD': 'mypassword', #ログインするためのパスワード } }
ENGINEにmysqlを指定します。また、NAME, USER, PASSWORDについてそれぞれ先ほどデータベースを作成したMySQLの情報指定します。今回は以下のような設定になります。
タイトル:setting.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sample_app', 'USER': 'root', 'PASSWORD': 'hogehoge2020', } }
MySQLでrootユーザーのパスワードはhogehoge2020に指定してあります。
migrateして動作確認をする
これでDjangoにMySQLを接続する準備は整ったのでmigrateしてDjangoのプロジェクトの立ち上げに最低限必要なテーブルを作成してlocalhostでアプリを確認できるかどうか確認してみましょう。manage.puがある階層に移動してpython manage.py migrate
コマンドを実行します。
タイトル:ターミナル
(myvenv)$ cd sample_app (myvenv)$ python manage.py migrate
以下のようなレスポンスがされればmigrate成功です。
タイトル:ターミナル
Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
adminにログインするためのユーザーを作成しておきましょう。
タイトル:ターミナル
(myvenv)$ python manage.py createsuperuser Username (leave blank to use 'suzuki'): Email address: admin@email.com Password: Password (again): Superuser created successfully.
それではローカルサーバーを立ち上げて確認してみましょう。
タイトル:ターミナル
(myvenv)$ python manage.py runserver
下のような画面になれば成功です!
admin画面にもログインしてみましょう。http://127.0.0.1:8000/admin/login/にアクセスして先ほど設定したユーザーネームとパスワードでログインしてみましょう。
ログインするとここでデータベースのテーブルの内容を直接操作することができるのでUsersテーブルで試してみましょう。
Usersを選択して新しくtanakaというユーザーを作成してみましょう。ユーザーとはadmin画面にログインできるユーザーのことです。
Savaをしてユーザーを作成したらMySQLでデータが追加されているかどうか確認してみます。
タイトル:mysqlモニター
mysql> SELECT username from auth_user; +----------+ | username | +----------+ | suzuki | | tanaka | +----------+ 2 rows in set (0.00 sec)
しっかりユーザーが追加されていることが確認できました。これにて動作確認は完了です!
この記事のまとめ
本記事ではDjangoでMySQLに接続する方法についてハンズオンで解説しました。最後に記事の要点についてまとめておきましょう。
- DjangoでMySQLに接続するためにはドライバーのインストールが必要
- あらかじめMySQLでデータベースを作っておく必要がある
- setting.pyで接続するMySQLの設定をオプションに記述する必要がある
皆さんもDjangoでMySQLを使ってアプリ開発してみましょう!