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)
デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ