walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

Python sqlite3 で "LIKE ? ESCAPE \" する

プチハマったのでメモ。

結論

keyword = "%E3%81%8A%E3%81%A3%E3%81%B1%E3%81%84"
escaped_keyword = keyword.replace("%", "\\%")
like_keyword = f"%{escaped_keyword}%"
params = (escaped_keyword,)
query = "SELECT * FROM foo WHERE bar LIKE ? ESCAPE '\\'"
cursor.execute(query, params)
rows = cursor.fetchall()

プチ解説

"%" を含む文字列は LIKE ? に渡すときに "%" をエスケープしてあげる必要があります("_" も同様)。

CLISQLite であれば "LIKE %\%% ESCAPE \" などして普通にエスケープできるのですが、Python では str に "\" を含む場合は "\" 自体をエスケープする必要があります。

と、プチややこしい感じだったのでメモです。

ちなみに、f-stringの中では "\" は使えないようです。また、"\" は "<" のように適当な記号に変えることも可能です。まあ大抵の文字列に "\" は入ってないので、都合が良い記号ではあると思うのですが。

%E3%81%8A%E3%81%A3%E3%81%B1%E3%81%84!