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にモデルが反映されました!