共通部分
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()
優雅な書き方
with
とcur.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)
で自動エスケープ