MySQLに接続 してみました。
MySQL connector/Pythonのダウンロード
まずはMySQL のサイトからPython用のコネクターをダウンロードします。
MySQL connector/Pythonのインストール
Windows版はWindowsインストーラで配布されているので、インストーラでインストールするだけだと思います。私は古いLinuxにインストールしたかったのですが、Ubuntu, Debian, SUSE, Red Hatのどのディストリビューションでもないので、Platform Independentを選択してtar.gz形式からインストールしました。
tar xzvf mysql-connector-python-1.0.12.tar.gz
cd mysql-connector-python-1.0.12/mysql-connector-python-1.0.12
python setup.py install
という感じでtarファイルを展開して、setup.pyファイルをinstallパラメータ付きで実行してインストールしました。ファイル/フォルダ名のバージョン番号は利用するバージョンによって変わってくると思います。私の環境ではpythonのバージョンが2.4なので敢えて古いバージョンを選択しました。
Windowsにはpython2.7をインストールしてコネクターは1.2.3をインストーラでインストールしました。
WindowsやUbuntuで利用するなら特に悩むこともなくインストールできるのだと思います。
接続テスト
さっそく、キチンとインストールできたのか、MySQLにアクセスできるかをテストしてみました。
古いLinux 機でやったため、システムもデータベースも文字コードがEUC-JP なので文字コードに関する処理の部分が最近の一般的なシステムとはちょっと違ってると思いますので、適宜UTF-8やUnicode での処理に置き換えて下さい。
# -*- coding: euc-jp -*-
import site
import mysql.connector
def test_con():
connect = mysql.connector.connect(user='root',
password='passwd',
host = '127.0.0.1',
database='TestDB',
charset='ujis')
cursor = connect.cursor()
cursor.execute('SELECT ID, TITLE FROM TEST_TBL ORDER BY ID DESC LIMIT 5')
rows = cursor.fetchall()
for (id, title) in rows:
print '%d\t%s' % (id, unicode(title))
cursor.close()
connect.close()
if __name__ == "__main__":
test_con()
14行目のrowsにはタプルが格納されたリストとして返されるようで、リストの1要素が1レコードで、タプルの1要素が1フィールドに対応しているようです。
レコードの内容をディクショナリで取得する
調べてみたら、どうやらMySQL connectorのDevelopment Releasesとなるバージョン2.0.0からはコネクターからカーソルを取得する時にdictionary=Trueとする事でディクショナリのリストとして結果を取得できるようです。
connect = mysql.connector.connect(user='root',
password='passwd',
host = '127.0.0.1',
database='TestDB',
charset='ujis')
cursor = connect.cursor(dictionary = True)
cursor.execute('SELECT ID, TITLE FROM TEST_TBL ORDER BY ID DESC LIMIT 5')
rows = cursor.fetchall()
for fields in rows:
print '%d\t%s' % (fields["ID"], unicode(fields["TITLE"]))
cursor.close()
connect.close()
こんな感じになるんでしょうかね。試してませんのであしからず。
フィールド名と値のディクショナリになってると、SQLの内容やフィールドの順序を知らなくても、フィールド名で値にアクセスできるので便利です。
MySQL for Python
今回テストしたモジュールではないMySQL接続モジュールです。もしかするとこちらのモジュールを使われている方の方が多いのかな。
MySQL for Python ( http://sourceforge.net/projects/mysql-python/ )