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
下記にアクセスして画面が表示されれば正常にできています。
感想
PythonでMySQLに接続するとき、
apt-getコマンドでmysqlclient
をインストールするなど、
ネットに色々情報があって試してみたのですが、
結局うまくいかずこの記事の内容でうまく接続できるようになりました。
��apt-getコマンドはMacOS 10.3以降では使えなさそうでした)
結構ハマって時間がかかってしまいましたが、今までMacからMySQLを使ったことがなかったので、
勉強になる良い機会になりました。
やっとMySQL接続できるようになったので、これからWebアプリを作成していこうと思います。