Python3 + DjangoでのMySQL接続設定

Python3 + Django でWebアプリを作成するときにMySQLを使ったのですが、

接続方法に少しハマったので書いておきます。






環境









MySQLをインストール



MySQLをインストールして起動します。

既にMySQLが入っていて最新にしたい場合はbrew update

MySQLを停止する場合はmysql.server stopを実行します。




$ brew install mysql

$ mysql.server start





MySQLの初期設定をします。

下記コマンドを実行すると色々聞かれるのですが、

パスワード以外のYes or Noの質問は全て「y」で問題なさそうでした。




$ mysql_secure_installation





MySQLに接続します。

パスワードを聞かれるので、設定したパスワードを入力します。




$ mysql -u root -p





MySQLに接続したら、任意のデータベースを作成します。




mysql> create database sample;






Djangoプロジェクトの設定



Python3からMySQLを使うにはPyMySQLが必要なようですので、

pipでPyMySQLをインストールします。




$ pip install PyMySQL





setting.pyで、MySQLの設定をします。

HOSTがlocalhostとか、PORTが空とかで動作する人もいるようですが、
私の環境では下記の設定をしないとマイグレートするときにエラーになりました。



setting.py




DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sample',
'USER': 'root',
'PASSWORD': '{自分が設定したパスワード}',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
'TEST': {
'NAME': 'test_sample'
}
}
}





MySQLを使えるようmanage.pyでインポートします。

下記を追加します。



manage.py




import pymysql

pymysql.install_as_MySQLdb()





データベースをマイグレートします。

エラーなく下記のように「OK」と返ってくれば正常にできています。




$ python manage.py migrate

result = self._query(query)
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 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





開発用サーバーを起動します。




$ python manage.py runserver





下記にアクセスして画面が表示されれば正常にできています。



http://127.0.0.1:8000/



f:id:mtomitomi:20180130231258p:plain






感想



PythonMySQLに接続するとき、
apt-getコマンドでmysqlclientをインストールするなど、
ネットに色々情報があって試してみたのですが、
結局うまくいかずこの記事の内容でうまく接続できるようになりました。

��apt-getコマンドはMacOS 10.3以降では使えなさそうでした)





結構ハマって時間がかかってしまいましたが、今までMacからMySQLを使ったことがなかったので、
勉強になる良い機会になりました。





やっとMySQL接続できるようになったので、これからWebアプリを作成していこうと思います。