標準ライブラリが充実しているのに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)