前回は、MacのローカルにPythonとDjangoの開発環境を構築した。
今回は、PythonとDjangoでMySQLへ接続することを目指す。
環境はこちら。
・Mac10.9.5
・Python3.4.2
・Django1.7.1
・MySQL5.6.21
・mysql-connector-python2.0.1
1. MySQLの準備
MySQLのバージョンを確認。
brew info mysql
mysql: stable 5.6.21 (bottled)と表示された。
テスト用のデータベースを作成しておく。
mysql -u root -p
以下、MySQL内でのコマンド。
djangoというデータベースを作成しておく。
CREATE DATABASE django;
MySQLをMacへインストールする記事はそういえば書いてなかったな・・・
2. PythonでMySQLへ接続
Python3系のMySQLドライバ問題は複雑だった。
こちらの記事では主要なドライバを全て試してダメだったらしい。
自分のローカル環境では、mysql-connector-pythonを使えば、python3.4からMySQL5.6へ接続することができた。
こちらやこちらやこちらやこちらなんかの最近の記事で使っているし、twitterの方でもmysql-connector-pythonを勧められた。
pipからmysql-connector-pythonをインストール。
pip install mysql-connector-python –allow-external mysql-connector-python
入ってるか確認してみる。
pip list
mysql-connector-python (2.0.1)と表示されたので大丈夫そう。
MySQLと繋がるか確認。
pythonを実行。
python
以下のコマンドで、mysql.connectorをインポートしてみる。
エラーが出なければ、無事にインポートされている。
>>> import mysql.connector
ちなみにmysqlclientという選択肢もあるらしい。
こちらは未確認です。
3. DjangoでMySQLへ接続
DjangoからMySQLへ接続してみる。
前回作成したDjangoのプロジェクト、mysiteから試しに接続してみよう。
設定ファイルを修正する。
vim ~/work/django/mysite/mysite/settings.py
データベースへ接続する部分を以下のように修正。
上で作ったdjangoというDBへつなぐ。
DATABASES = { 'default': { 'ENGINE': 'mysql.connector.django', 'NAME': 'django', 'USER': 'root', 'PASSWORD': '****', 'HOST': '', } }
manage.pyがあるフォルダへ移動する。
cd ~/work/django/mysite
こちらの記事によるとDjango1.6以前は以下のコマンドを使って、DBの生成とスーパーユーザを作成した。
(ちなみに自分はこちらでやってしまった・・・)
python manage.py syncdb
Django1.7からは分かれて、以下の2つのコマンドを使うとのこと。
python manage.py migrate
python manage.py createsuperuser
一応、Django1.7でもsyncdbを使えたらしく、DB生成とスーパーユーザは作成された。
以下のように表示されたらDB生成ができてる。
Operations to perform:
Apply all migrations: sessions, admin, contenttypes, auth
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying sessions.0001_initial… OK
また、スーパーユーザを作成する場合、質問に答えないといけない。
You have installed Django’s auth system, and don’t have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use ‘runble1’): root
Email address:
Password:
Password (again):
Superuser created successfully.
DBが生成されたか確認する。
mysql -u root -p
use django;
show tables;
以下のようになってました。
+—————————-+
| Tables_in_django |
+—————————-+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+—————————-+
DjangoのデフォルトはSQLiteだったんだけど、MySQLを使うのは異端なのかな・・・
4. 補足:mysql-python(MySQLdb)では失敗する
mysql-pythonがPythonとMySQLのデファクトなドライバらしいが、色々と問題があるっぽい。
pip install mysql-python
以下のようにインポートできませんと出る。
ImportError: No module named ‘ConfigParser’
—————————————-
Cleaning up…
Command python setup.py egg_info failed with error code 1 in /Users/runble1/.virtualenvs/service/build/mysql-python
Storing debug log for failure in /Users/runble1/.pip/pip.log
気をつけろ。
コメント
[…] Python3.4とDjango1.7でMySQL5.6へ接続(mysql-connector-pythonを使え) […]