猫でもわかるWebプログラミングと副業

本業Webエンジニア。副業でもWebエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Djang 2.2 -> 3.1 バージョンアップで module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'

f:id:yoshiki_utakata:20210307171243p:plain

エラー内容と解決方法

Django 2.2 から Django 3.1 にアップグレードしたら以下のエラーが出るようになった。

(前略)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 27, in DatabaseIntrospection
    FIELD_TYPE.JSON: 'JSONField',
AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'

調べたら以下のページが出てきた

https://stackoverflow.com/questions/63525904/attributeerror-module-mysqldb-constants-field-type-has-no-attribute-json-wh

エラーを見たら分かるように、 DB 周りのエラーで、 mysqlclient のバージョンを上げたら直るとのこと。

このエラーが出た時、使っていた mysqlclient のバージョンは 1.3.14 だった。

PyPI のページを見ると、 mysqlclient の最新バージョンは 2.0.3 とのことなので、 このバージョンまで上げてみる。

pip uninstall mysqlclient
pip install mysqlclient==2.0.3

これで該当のエラーは出なくなった。

このエラーは何か

MySQL 5.7 から、型に JSON というものが増えており、 Django もバージョン3から JSON 型に対応したのだが、 mysqlclient のバージョンが古くて JSON 型に対応していないとこのエラーになる。