Quantcast
Channel: Maesan blog » Python
Viewing all articles
Browse latest Browse all 7

[Python] MySQLdbでDictCursorとか知らんかったし

$
0
0

PythonでMySQLdbつかってデータを取得する時にこんな感じにやってた
DBはこのエントリーのやつとして

import MySQLdb

con = MySQLdb.connect(db="currency", host="127.0.0.1", port=3306, user='root', passwd='root')
sql = "select target, value, inverse, created from currencies order by created desc"
cur = con.cursor()
cur.execute(sql)
row = cur.fetchone()
print row

実行結果はこんな感じでタプルで返ってくる

(‘EUR’, 0.0089999999999999993, 111.111, datetime.datetime(2010, 12, 3, 22, 4))

この場合、為替レートととろうと思ったら row[2]とかしないといけないので全く直感的じゃないよね。
で、phpのmysql_fetcharray() したときみたいな辞書(ハッシュ)で扱いたいなぁと思ったのでこんなことやってみた。

fields = [field[0] for field in cur.description]
dict_row = dict(zip(fields, row))
print dict_row

こうすると望み通り辞書でデータが扱えるようになってうれしい

{‘inverse’: 111.111, ‘target’: ‘EUR’, ‘value’: 0.0089999999999999993, ‘created’: datetime.datetime(2010, 12, 3, 22, 4)}

って満足してたら実はDictCursorって便利なのがあったらしく

from MySQLdb.cursors import DictCursor

cur = con.cursor(DictCursor)
cur.execute(sql)
row = cur.fetchone()
print row

ってやったら上のと全く同じの取得できた><

{‘inverse’: 111.111, ‘target’: ‘EUR’, ‘value’: 0.0089999999999999993, ‘created’: datetime.datetime(2010, 12, 3, 22, 4)}

参考ページ

ジャンゴ バックエンドに依存しない DictCursor
pythonのmysqldbの使い方メモ


Viewing all articles
Browse latest Browse all 7

Trending Articles