※こちらは旧サイトです(新サイトはこちら

Python3+Django1.10+Nginx+uWSGIでMySQLに接続するまでのメモ

2017-03-23 21:42:02

環境

$ cat requirements.txt
Django==1.10.5
PyMySQL==0.7.10

インストール

$ pip install -r requirements.txt

Djangoセットアップ

$ django-admin startproject [project_name]
$ cd [project_name]
$ python manage.py startapp [app_label]

MySQLの接続設定

接続先の情報(環境変数)は、docker-compose.yml.envrc(direnv)に記述してます

$ vim [app_label]/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': os.environ.get('ENV_DB_HOST'),
        'NAME': os.environ.get('ENV_DB_NAME'),
        'USER': os.environ.get('ENV_DB_USER'),
        'PASSWORD': os.environ.get('ENV_DB_PASS'),
    }
}

MySQLを使うようDjango側に設定

コマンドラインからmanage.py経由で接続する場合と、uWSGI経由でwsgi.pyから接続する場合があるため、両方に以下の記述が必要でした

// 「manage.py」と「wsgi.py」の両方に記述
import pymysql
pymysql.install_as_MySQLdb()

実行してみる

$ 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