2014年4月1日火曜日

PythonでのDB処理(MySQL)


PythonからMySQLにアクセスする必要があったので、そのメモ。
localhostのaaadbにある、Userテーブルを取得するだけの一般的なfetch.
処理速度も考慮する必要があったので、いくつかテストを兼ねて。

まとめ
・cursorはデフォルトだと遅い
・辞書形式でのアクセスが可能になるDictCursorは利便性高い
・大量にデータを取得する場合はSSCursorで

import pymysql
import time
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='aaadb',charset='utf8', use_unicode='true')

# make cursor as default
cur = con.cursor()

t0 = time.time()
cur.execute("select * from User")
t1 = time.time()

keys = []
for desc in cur.description:
  keys.append(desc[0])

for row in cur:
 print row[keys.index('name')]

cur.close()
con.close()

t1-t0 : 28msec

import pymysql
import time
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='aaadb',charset='utf8', use_unicode='true')

# make cursor as DictCursor
cur = con.cursor(pymysql.cursors.DictCursor)

t0 = time.time()
cur.execute("select * from User")
t1 = time.time()

# No need to get 'description'

for row in cur:
    print row['id']

cur.close()
con.close()


t1-t0 : 32msec

import pymysql
import time
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='aaadb',charset='utf8', use_unicode='true')

# make cursor as SSCursor
cur = con.cursor(pymysql.cursors.SSCursor)

t0 = time.time()
cur.execute("select * from User")
t1 = time.time()

keys = []
for desc in cur.description:
  keys.append(desc[0])

for row in cur:
 print row[keys.index('name')]

cur.close()
con.close()

t1-t0 : 1msec

0 件のコメント:

コメントを投稿