format_list_bulleted
【Django】DjangoとMySQLを接続する方法について解説(mysqlclient)
最終更新日時:2020-05-16 02:34:04



DjangoではデフォルトでSQLite3がデータベースとして利用されています。これはデータベースごとにファイルを作成してデータを管理するものです。ですが、チーム開発等の必要性がある場合などにMySQLを使った方が勝手がいいケースは多いと思います。今回はDjangoでMySQLに接続する方法についてハンズオン形式で解説していきたいと思います。

DjangoでMySQLに接続する手順

DjangoでMySQLに接続するためには以下のようなステップを踏みます。

  1. mysqlclientをインストールする
  2. Djangoでプロジェクトを立ち上げる
  3. MySQLでプロジェクトで使用するデータベースを作成しておく
  4. setting.pyで使用するデータベースの指定をする
  5. 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

下のような画面になれば成功です!

djangoのホーム画面

admin画面にもログインしてみましょう。http://127.0.0.1:8000/admin/login/にアクセスして先ほど設定したユーザーネームとパスワードでログインしてみましょう。

ユーザーログイン画面

ログインするとここでデータベースのテーブルの内容を直接操作することができるのでUsersテーブルで試してみましょう。

ユーザー画面

Usersを選択して新しくtanakaというユーザーを作成してみましょう。ユーザーとはadmin画面にログインできるユーザーのことです。

tanakaユーザーの作成

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を使ってアプリ開発してみましょう!