[Django] Anaconda,Pyhon3.x,Django2.x の環境でMySQLを使う

PythonとDjangoの修行中。

DjangoのdefaultのsqliteでなくMySQL使いたいなと思って試行錯誤したのでメモ。

mysqlclientエラー

# settings.py

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB名',
        'USER': 'xxxx',
        'PASSWORD': 'xxxx',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

マイグレーションを実行

$ python manage.py migrate

# 長いエラーメッセージの最後に
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

PyMySQL

mysqlclientがインストールされていません。ということなので、pipかanaconda経由で「PyMySQL」をインストールします。

# manage.py に追記

import pymysql
pymysql.install_as_MySQLdb()

再度、マイグレーションを実行してみる

$ python manage.py migrate

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
	HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.0/ref/databases/#mysql-sql-mode

WARNINGSが発生。調べたところsettings.pyのDBの項目にオプションを追加する必要があり、DBの設定は下記のようになりました。

settings.pyのDATABASES設定

# settings.py

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB名',
        'USER': 'xxxx',
        'PASSWORD': 'xxxx',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

これで正常にmigrateができ、DBにモデルが反映されました!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする