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