Edited at

MySQLdbの優雅な使い方

More than 5 years have passed since last update.

共通部分

import MySQLdb

args = {"hostname": "poko",
"db": "hoge",
"user": "pokopoko",
"passwd": "hogehoge",
"charset": "utf-8"
}

優雅でない書き方

con = MySQLdb.connect(**args)

cur = con.cursor()

# commitが必要な処理
cur.execute("INSERT INTO pokos (id, poko_name) VALUES (%s, %s)" % (con.literal(id), con.literal(poko_name)))
con.commit()

cur.close()
con.close()

優雅な書き方

withcur.execute(query, args)を利用

with MySQLdb.connect(**args) as cur:

cur.execute("INSERT INTO pokos (id, poko_name) VALUES (%s, %s)", (id, poko_name))

下の書き方だとごちゃごちゃしない。

commit忘れやconnectionの開放の忘れなども防げる。例外が起きたらrollbackも。

withではas以降に__enter__()の返り値が入る。

withブロックを抜けるとき__exit()__がよばれる

cur.execute(query, args)で自動エスケープ