Python3.4とDjango1.7でMySQL5.6へ接続(mysql-connector-pythonを使え)

前回は、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.3 から mysql5.5 へアクセスする

Djangoのインストールと起動

Python Django入門 (3)

コメント

  1. […] Python3.4とDjango1.7でMySQL5.6へ接続(mysql-connector-pythonを使え) […]

タイトルとURLをコピーしました