Tech Racho エンジニアの「?」を「!」に。
  • 開発

PythonのMySQLdbを使いこなすコツ

標準ライブラリが充実しているのにMySQLはなぜかオプションのpythonくんです。

そのせいか、よく使われるMySQLdbの情報が少ないので、気づいたところを書いておきます。

fetchone()の結果をディクショナリにしたい

以下のように、cursorclassを指定しておくと、fetchoneの結果がタプルではなくディクショナリになって使いやすいです。
cursor()の第2引数を指定してもOKですが、Warningが出ます。

db = MySQLdb.connect(host='localhost', user='root', passwd='', db='hoge', charset='utf8')
db.cursorclass = MySQLdb.cursors.DictCursor

LIKE検索したい

LIKEで前方・後方をワイルドカード指定したいとき、単純に検索文字列に%を付けるとエスケープされてしまいます。
SQL文を %%%s%% のように書くと、コーテーションの位置が不正だと怒られてしまいます。

#これだとエスケープされてしまう
cursor.execute('SELECT * FROM hoge WHERE text LIKE %s', ('%searchword%'))

#これだとエラーになる(以下のように展開されてしまう)
#LIKE '%'searchword'%'
cursor.execute("SELECT * FROM hoge WHERE text LIKE '%%%s%%'", ('searchword'))

仕方ないので、以下のように手動でやると良いです。

sql = "SELECT * FROM hoge WHERE text LIKE '%%%s%%'" % MySQLdb.escape_string('searchword')
cursor.execute(sql)

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。