ロゴWeb開発ブログ

DjangoでmysqlclientもMySQL Connector/Pythonも使えない場合はPyMysqlを使うと良い

作成
  • 使用したバージョン
  • Django 4.2.6

いままでDjangoでMariaDBを操作するためにmysqlclientを使用していた。

新しいWindowsで開発環境を整えようと以前と同じ方法でをインストールしてみた。

pip install mysqlclient

ところ次のエラーが出てインストールできない。


error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools

書かれている通りMicrosoft C++ Build Toolsをダウンロードして必要なものをインストールしてみた。

これでpip install mysqlclientをすると別のエラーが出る。


'mysql.h':No such file or directory

バージョンを変更したりMariaDB C Connectorをインストールしたり環境変数をいじってみたりしたが結局解決できず。

mysqlclientのドキュメントを見てみると、Windowsでビルドするのは大変だと書いているので別のドライバーを使うことに。

MySQL Connector/Python

MySQL Connector/PythonはMySQLの公式ドライバー。
pip install mysql-connector-pythonでインストールすることができた。

pythonでテストしてみるとちゃんとMariaDBに繋げることができた。

これで解決と思いきやDjangoで開発サーバーを立ててみると新たなエラーが出る。


MySQL Connector/Python C Extension not available (No module named '_mysql_connector')

use_pureの設定をFalseにするといいらしいが直らず。
Application Development with the Connector/Python C Extension

バージョンを変更したりしたがやはり解決できず。

これまたあきらめることに。

PyMySQL

PyMySQLはPure pythonなのですんなりとインストールすることができた。

Djangoのconfigには次のように設定する必要がある。


import pymysql
...
pymysql.install_as_MySQLdb()
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql',
...
}
}

Djangoでサーバーを立ててもエラーなし。

パフォーマンス面でmysqlclientやConnector/Pythonと比べると劣るらしいけど、問題なく動作したんでひとまず解決!。