Help us understand the problem. What is going on with this article?

DjangoでMySQLを使うためには

はじめに

Djangoでは、デフォルトでSQLite3が使用できる様になっていますが、パフォーマンスの観点からMySQLの方を使用したいという方もいると思います。この記事では、DjangoでMySQLを使うための準備を説明していきます。

環境

Mac OS Mojave 10.14.5
Homebrew 2.1.15
python 3.7.4
Django 2.2.6
pip 19.3.1

MySQLのインストール

まず最初にMySQLをインストールしていきます。下記のコマンドの実行でインストールすることができます。

$ brew install mysql
$ mysql --version
mysql Ver 8.0.17 for osx10.14 on x86_64 (Homebrew)

MySQLの起動

以下のコマンドでMySQLの起動を行います。起動できたら接続できるか確認してみましょう。

$ mysql.server start
Starting MySQL
. SUCCESS!

$ mysql -u root
...
mysql>

このまま今回のプロジェクトで使用するデータベースを作成しましょう。mysqlに接続した状態で以下のコマンドを実行します。

mysql> create database database_name;

実行したら作成できているか確認しましょう。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| database_name      |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

Djangoの設定ファイルの編集

Djangoプロジェクトの中のsettings.pyという設定ファイルを編集してMySQLを導入します。今回は先ほど作成した"database_name"という名前のデータベースを使用します。

[settings.py]
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

...省略...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 変更
        'NAME': 'database_name', # プロジェクトで使用するデータベース名
        'USER': 'root', # パソコンにインストールしたMySQLのユーザー名
        'PASSWORD': '', # 同上。そのパスワード
    }
}

...省略...

ドライバのインストール

最後の準備として、pythonがMySQLに接続するためのドライバをインストールする必要があります。ドライバには主要なものとして以下の4種類が存在します。

  • PyMySQL(PurePythonを謳うドライバ)
  • mysql-connector-python(MySQLの公式ドライバ)
  • MySQL-Python(昔からあるがpython3に未対応)
  • mysqlclient(MySQL-Pythonをpython3に対応させたOSS。Djangoの推奨ドライバ)

どれを採用するかは自由ですがpython3に未対応のMySQL-Pythonを採用するという選択肢はないでしょう。この記事ではDjangoの推奨ドライバであるmysqlclientを採用します。
(ちなみにPyMySQLを採用する場合は必要な作業が一つ増えます。)

ということでmysqlclientをインストールします。

$ pip install mysqlclient

データベースを構築する

準備が完了したのでmigrateでDjangoでデータベースを構築します。(仮想環境のアクティベートを忘れずに!)

$ python manage.py makemigrations
$ python manage.py migrate

ここまでの手順で問題なくデータベースが作成できると思います。

おわりに

この記事でDjangoに関する投稿は2つ目になりました。Djangoを用いた開発では他にも躓いてしまうポイントは多々あると思うので、ご要望があればコメントしていただけると助かります!

kanazawa1226
SIer勤めのSE
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away