SQLAlchemy で like 検索した際のエスケープ
SQLAlchemy で like 検索をしたい時は以下のようにするらしい。
# DB は MySQL
def search(query): rows = Session.query(Items).filter(Items.title.like('%\\' + query + '%', escape='\\')).all() return rows
バインドしてないのが気になったけど、大丈夫みたいだめくさい…。あとでちゃんと検証する。
SQLAlchemy uses bound parameters by default so that ordinary SQL injections are not possible anymore.
[sqlalchemy] Built-in escape function? - Felix Schwarz - com.googlegroups.sqlalchemy - MarkMail
# foo に前方後方一致するデータがある場合 rows = search(u'foo')
% や _ もエスケープして一致しない。
rows = search(u'%')
ところでお手軽に扱える全文検索エンジンって何が良いんだろう。