Python3系でDjangoを利用した際に、MySQLに接続するのにちょっと苦労したので、その時の手順を記載します。
Python2系でやってたやり方だとうまくいかなかったので・・・。
Djangoのプロジェクトの作成自体がわからない場合は下記の記事を参考にしてもらえればと思います。

環境
- Python:3.5.1
- Django:1.10.5
- MySQL:5.5.42
PyMySQLのインストール
Python2系ではDjangoとMySQLとの接続に「MySQL-python」を利用しますが、Python3系では「MySQL-python」が利用できないので、「PyMySQL」を使用します。
pipでインストールします。
$ pip install PyMySQL==0.7.9
manage.pyカスタマイズ
manage.py
でPyMySQL
を利用できるようにします。
以下のコードをimport文のすぐ後ろに追加します。
import pymysql
pymysql.install_as_MySQLdb()
settings.pyを編集する
settings.py
のDBの設定をMySQL用に編集します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sample', # DB名を設定
'USER': 'user', # DBへ接続するユーザIDを設定
'PASSWORD': 'pass', # DBへ接続するユーザIDのパスワードを設定
'HOST': 'localhost',
'PORT': '8889',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST': {
'NAME': 'test_sample'
}
}
}
DBを作成する
settings.py
で設定したNAME
と同じ名前のDBを作成しておきます。
CREATE DATABASE sample;
接続確認を行う
実際にマイグレーションを実行してDjango
とMySQL
が接続できているか確認します。
$ python manage.py 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 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 sessions.0001_initial... OK
上記コマンドを実行後にMySQLのDBに下記のテーブルが作成されていたら接続成功です。
- 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
本番環境でもMySQLが使えるようにする
今までの手順を行うことで、runserver
の環境であればMySQLを問題なく利用することができます。ただ、runserver
の環境はあくまで「開発環境」であり、本番運用の環境ではありません。
「本番環境」でもMySQLが使えるようにするためにはwsgi.py
の編集が必要になります。
wsgi.py
のimport文のすぐ後ろに下記のコードを追加します。
import pymysql
pymysql.install_as_MySQLdb()
これで、「本番環境」でwsgi
を利用してWebアプリケーションを実行する場合でも、問題なくMySQLに接続できるようになります。
最後に
手順としては全然難しいものではありませんが、知らないと結構はまります・・・。
私もStack Overflow
などの英語サイトを見てようやく対応できたような感じだったので・・・。
もし、Python3系を使っていて、同じ問題を抱えている方がいれば参考にしてもらえればと思います。
コメント
[…] Python3系でDjangoでMySQLに接続する […]
[…] 参考記事 Python3系でDjangoでMySQLに接続する […]
[…] https://codelab.website/python3-django-mysql/ […]