エンジニアのサブルーチン

あまり注目されない組み込みのシステムエンジニアをやっています。エンジニア業界のこととか、勉強したこととかを不定期に更新していきます。

Django2.2でPyMySQLを使いたかった

原因不明のアレルギー性の蕁麻疹で更新どころじゃなかった。 治ったので再開します。

TECH::EXPERTの方の進捗も全然行けそうなので、やりたかったPythonいじりました。

PythonでWebサイトを作りたかったので、WebフレームワークであるDjango

qiita.com

この記事を利用して、勉強していた。


PyMySQLを使いたかったのでDjangoでPyMySQLを使うために、DjangoのDB関連の設定をPyMySQL用に変更した

setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sample',  #作成したデータベースの名前を入力
        'USER': 'root',    #ローカルホストなのでユーザー名はroot
        'PASSWORD': '',    #以下はローカルホストなので空でOK
        'HOST': '',
        'PORT': ',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
        'TEST': {
            'NAME': 'test_sample'
        }
    }
}

manage.py

一番後ろに追記

import pymysql #pymysqlのモジュールをimport


pymysql.install_as_MySQLdb()

ちなみに本番環境でPyMySQLを使う場合にはさらにwsgi.pyにもmanage.pyと同様の記述を追加しなくてはならない。


これで準備OK ターミナルに以下を入力

python3 manage.py migrate


けどエラー吐きよった。

ImportError: No module named pymysql

どうやらpymysqlがちゃんとimportされてないらしい。

sysにpymysqlのパスを通してもダメだった。。。。


...

解決方法

Djangoのバージョンを下げる


いろいろ調べた結果、Django2.2ではまだPyMySQLは対応していないらしく、バージョンを2.1に下げることで、解決するらしい。アンインストールしてDjango2.1をインストールして再度migrateしてみた

python3 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 admin.0003_logentry_add_action_flag_choices... 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 auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK

いけた....

このエラー解決するのにかなり時間かかってた。やっと先進める。