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は最高のマシンなのですが、いろいろと開発する時には不都合がありますね。