m1 Mac Djangoエラー NameError: name ‘_mysql’ is not defined

NameError: name '_mysql' is not defined

M1チップ搭載のMacBook Airを買いました。

Djangoを使ってローカルで開発をしているのですが、MySQLの接続で以下のエラーが出ました。

問題点

run serverやmakemigrationsをすると以下のようなエラーが出るのです。

いろいろ検索して調べて出てきた解決策を実行するも、どれも解決することはできず、詰んだかと思いましたが、別の方法を採ることで解決できたので、記録しておきます。

Exception in thread django-main-thread:
Traceback (most recent call last):
  File “/opt/anaconda3/lib/python3.9/site-packages/MySQLdb/__init__.py”, line 18, in 
    from . import _mysql
ImportError: dlopen(/opt/anaconda3/lib/python3.9/site-packages/MySQLdb/_mysql.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace ‘_mysql_affected_rows’

During handling of the above exception, another exception occurred:

…(中略)…

File “/opt/anaconda3/lib/python3.9/site-packages/MySQLdb/__init__.py”, line 24, in 
version_info, _mysql.version_info, _mysql.__file__
NameError: name ‘_mysql’ is not defined

解決法

調べるとmysqlclientを使う方法ばかり出てくるのですが、これでやると先ほどのエラーが出てしまいます。

そこで、別のmysql-connector-pythonを使うことで解決できました。

以下のコマンドでインストールします。

 brew install mysql-connector-python

インストールしたらDjangoのsettings.pyファイルのデータベースの部分を以下のように変更します。

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': 'データベース名',
        'USER': 'ユーザー名',
        'PASSWORD': 'パスワード',
    }
}

これで無事にMySQLに接続することができ、run serverやmakemigrationsが成功しました。

最後に

同じエラーではまっている人の参考になれば幸いです。

m1 MacBook Airは最高のマシンなのですが、いろいろと開発する時には不都合がありますね。

シェアする

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

フォローする