Python 3系
で Django
を利用した際に、 MySQL
に接続するのにちょっと苦労したので、その時の手順を記載します。Python 2系
でやってたやり方だとうまくいかなかったので・・・。
Django
のプロジェクトの作成自体がわからない場合は下記の記事を参考にしてもらえればと思います。
環境
- Python : 3.5.1
- Django : 1.10.5
- MySQL : 5.5.42
PyMySQL のインストール
Python 2系
では Django
と MySQL
との接続に「 MySQL-python
」を利用しますが、 Python 3系
では「 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に接続する […]
[…] http://43.206.46.12/python3-django-mysql/ […]