以下の内容はhttps://nainaistar.hatenablog.com/entry/insentive-in-sql-alchemyより取得しました。


SQLAlchemyで大文字小文字を区別せず比較する(lower, ilike)

始めに

email等の項目は大文字小文字を区別せずに比較したいことがあります。

その場合には小文字化して比較することになります。今回の記事では、PythonのSQLAlchemyで使用するlowerilikeを素振りします。

環境

  • Python
    • 3.12.3
  • SQLAlchemy
    • 2.0.31

lower

DB側で補完しているデータもlowerとするときにはfunc.lowerを使用します。渡すパラメータに関してはPythonのlowerを使用してください。

select(User).where(func.lower(User.email) == parameter.lower())

ilike

ilikeinsensitive LIKEの略称です。大文字小文字を区別しない文字列マッチングを行います。

PostgreSQLでは、ILIKE演算子がありますので、SQLAlchemy独自の構文ではありません。

select(User).where(User.email.ilike(f"%{email}%"))

ILIKE演算子はPostgreSQL固有の拡張機能ですが、SQLAlchemyでは他のデータベースでも同様の結果を出力してくれるようにlowerしたものと同等の機能を提供してくれます。

# queryを文字列化
# SELECT *
# FROM users
# WHERE lower(users.email) LIKE lower(:email_1)

ソースコード

終わりに

PostgreSQLILIKEなんて便利な演算子があるのを調べてはじめて知りました。こういう知らない方向からの知見を得られるので、ブログはいいですね。




以上の内容はhttps://nainaistar.hatenablog.com/entry/insentive-in-sql-alchemyより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14