トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71:Python-MySQLdbでDictCursorを使ってみる

Last-modified: 2013-08-24 (土) 02:14:21 (3753d)
Top / 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を使うんだったら、1回は読んだほうがいいですよ~