E71:Python-MySQLdbでDictCursorを使ってみる
E71:Python-MySQLdbでDictCursor?を使ってみる †
PythonでMySQLdbを使うときに、一番最初に使うカーソルクラスは、実は
- MySQLdb.cursors.Cursor
だったりします。
まあ、デフォルトでも普通に使えますが、fetchした後、selectした値を配列の番号指定みたいな使い方をしなきゃならないんで、場合によってはちょっと使いにくいことがあるかと思います。(場合によっては都合はいいですが笑)
まあ、たとえば、標準のCursorクラスだと、こんな使い方しますね~
>>> conn = MySQLdb.connect(db="test_db", host="127.0.0.1", ・・・) >>> cur = conn.cursor() >>> cur.execute('select * from test') 2L >>> rows = cur.fetchall() >>> for row in rows: ... print row[0] ... print row[1] ... taro taropass
この、「print row[0]」ってところが、いまいちに感じる人もおおいはず!・・・?笑
「つーか、大体「標準のCursorクラス」ってどこで指定してんだよ」
って思う方もいらっしゃるでしょう。(いませんかね~)
Cursorクラスの指定の仕方 †
Cursorクラスの指定の仕方は、非常に簡単です。
conn.cursor()
のメソッドの中に、Cursorクラスを指定してあれげればいいだけです。
ちなみに、Cursorクラスって、実はいくつかあります。簡単に紹介します。
クラス名 | 概要 |
MySQLdb.cursors.BaseCursor? | カーソルオブジェクトのベースクラス |
MySQLdb.cursors.Cursor | デフォルトで使用されるカーソルクラス メソッドの引数を省略すると、デフォルトで使用される。 |
MySQLdb.cursors.DictCursor? | 辞書型のように結果を返すカーソルクラス |
まあ、他にもカーソルクラスっていくつかあるので、興味がある場合、当記事の最下部の外部リンクの「MySQLdb User's Guide」を見てみてください。
DictCursor?を使ってみる。 †
百聞は一見にしかず。
早速使ってみましょう。つーか、使用例は以下のとおり。
まずは、MySQLdbインポートして、接続します。
>>> import MySQLdb >>> conn =MySQLdb.connect(db="test_db", host="127.0.0.1",・・・)
次に、cursor()メソッドの引数に、「MySQLdb.cursors.DictCursor?」として呼び出します。
>>> cur = conn.cursor(MySQLdb.cursors.DictCursor)
すると、もうDictCursor?オブジェクトが出来上がって、curに入ります。あら簡単笑
して、SQLを実行してみます。
>>> sql = 'select * from board' >>> cur.execute(sql) 4L >>>
実行結果を1行だけ取ってみます。
>>> cur.fetchone() {'comment': 'aaa', 'email': 'hiroooo000@gmail.com', 'uptime': datetime.datetime(2009,8,4,1,57,33), 'id': 1L, 'name': 'testuser'}
すると、こんな感じで取れます。
こりゃあ便利だ笑
なんとなくまとめ †
標準のCursorクラスは、バッチ処理みたいないっきに値をとってきてぐるぐる回す、ようなのに向いていて、DictCursor?クラスは、いわゆる業務処理みたいなので使うと便利なのかな~
外部リンク †
- MySQLdb User's Guide
http://mysql-python.sourceforge.net/MySQLdb.html
このサイトは、MySQLdbを使うんだったら、1回は読んだほうがいいですよ~