28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Django事始め その3 about Python3 & MySQLコネクタ

Last updated at Posted at 2014-09-02

※この記事は未解決記事です。

##開発環境
PC: MacOS X 10.9.4
Python3.4.1
Django1.6.6

##DB設定が反映されない現象

前回の記事ですんなりプロジェクト作成がうまくいったと思ったが、下記のEclipseのデータベースの設定が反映されていないことに気づいた。

スクリーンショット 2014-09-02 14.46.18.png

データベースと同期($ python3 manage.py syncdb)したのだが、対象のMySQLデータベースに反映されない。setting.pyのDB設定の記述を確認してみたらsqlite3の設定となっている。そこでコメントアウトして、直接mySQLの設定を記述してみた。

setting.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER':'db_user',
        'PASSWORD':'xxxxxxx',
        'HOST':'localhost',
        'PORT':'3306',
    }
}
#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}

MySQLモジュールエラーの頻発

しかし、再度、同期($ python3 manage.py syncdb)すると下記エラーが発生するようになった。

 ImportError: No module named 'MySQLdb'

どうやら、MySQLモジュールが見つからないようだ。そこで、MySQLモジュールのインストールを試みた。

 $ pip3 install mysql-python

しかし、今度は下記エラー。

 ImportError: No module named 'ConfigParser'

今度は、下記にてインストールを試みた。

 $ pip3 install mysql-connector-python --allow-external mysql-connector-python

今度は、インストール自体はうまく行ったようだ。
しかし、まだエラーが続く。

 ImportError: No module named 'MySQLdb'

MySQL-for-Python-3 のインストール

諦めず、最新のMySQL-for-Python-3とやらが、Githubにあったので、インストールを試してみた。

 pip3 install --user https://github.com/davispuh/MySQL-for-Python-3/archive/1.0.tar.gz

インストール自体はうまく行ったようだ。しかし、また別のエラーが続く。

 Library not loaded: libmysqlclient.18.dylib

そこで、MySQLのライブラリにあるであろうlibmysqlclient.18.dylibのシンボリックリンクを /usr/libに作ってみた。

 $ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

##補足事項

その後、Django公式マニュアルを読んででみたら下記の記述。

Python 3
At the time of writing, the latest release of MySQLdb (1.2.4) doesn’t support Python 3. In order to use MySQL under Python 3, you’ll have to install an unofficial fork, such as MySQL-for-Python-3.
This port is still in alpha. In particular, it doesn’t support binary data, making it impossible to use django.db.models.BinaryField.

簡単に言うと、

Python3
マニュアル記述時点では、MySQLdb (1.2.4)最新リリース版ではPython 3をサポートしていない。MySQLを使用するなら MySQL-for-Python-3のような非公式なフォーク版をインストールしたほうが良い。
この移植版はまだαバージョンで、とりわけ、バイナリ型データをサポートしていない為、django.db.modules.BinaryFieldも利用できない。

ふむむ~。

##途中経過として

どうやらWebやマニュアルで調べる限り、現時点(2014年08月末)ではPython3MySQLdbが対応していないようだ。

それでは、どのように諦めるべきか?
Python初心者なので、リリース間隔(いつまで待てば対応されるか)の感覚が掴めない。

  1. DBを変更する (MySQL → 他のDB)
  2. Pythonのバージョンを変更する (3.4 → 3.1)
  3. Python/Djangoの勉強をやめる

そう言えば1〜2年前にRuby on Railsでも、MySQLコネクタ周りでハマったな。

やっぱ、Python初心者が首を突っ込むような問題では無い気がしてきた。悔しいのでアドバイスやご指摘をよろしくお願いします。

28
26
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?