django WebアプリケーションでMySQLを利用する

意外と簡単!DjangoでMySQLを利用する

djangoアプリケーションではSQLiteが標準装備されている。
そのためちょっとしたアプリケーションを作成する場合はデータベース周りは何も指定する必要がありません。

しかし仕事で使う場合はMySQLなど他のRDBSを使用しなければならない機会もあるでしょう。

今回、djangoアプリケーションでMySQLを利用する機会があったので、設定方法を調査、検証してみました。

MySQLにデータベースを作成する

まずMySQLにデータベースを作成します。

DB Name djangodb データベース名
DB User django DBユーザー名
DB password django DBユーザーパスワード

rootユーザーで行います。

create database djangodb default charaset=utf8;
grant all on djangodb.* to 'django'@'localhost' identified by 'django';

MySQLの文字コードをutf8に設定している人は’default charaset=utf8’は省略してもいいと思いますが、特に設定していない場合はDB単位で設定しておくといいでしょう。

念の為、djangoユーザーでログインしなおしてデータベースがあるかないか(show databases;)を確認しておきましょう。

pymysqlライブラリの導入

pythonからMySQLを操作するpymysqlライブラリをインストールします。

$ pip3 install pymysql

Could not install packages due to an EnvironmentError: [Errno 13] 許可がありません: ‘/usr/local/lib/python3.7/site-packages/pymysql’
Consider using the `–user` option or check the permissions.

パーミッションがないというエラーが出たので、とりあえず–userをつけてインストールしてみます。

$ pip3 install --user  pymysql

今度は通りました。

–user とすると以下にインストールされます。
/home/ユーザー名/.local/lib/python3.7/site-packages/

settings.pyの編集

プロジェクトディレクトリのsettings.pyのデータベース項目を修正します。

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'djangodb',
        'USER':'django',
        'PASSWORD':'django',
        'HOST':'',
        'PORT':"",
    }
}

manage.pyの編集

既存のimport文の下あたりに追記します。

import pymysql #pymysqlのインポート
pymysql.install_as_MySQLdb() #MySQLの指定

DBの初期化

$ python3 manage.py migrate

models.pyを編集していないのでmakemigrateコマンドは不要です。

確認

MySQLにdjangoでログインしてdjangodbデータベースにテーブルが増えていれば成功です。

mysql> show tables;
+----------------------------+
| Tables_in_djangodb         |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+

これでdjangoからMySQLを使用する準備が整いました。