SQLAlchemyで以下を実装できますか?
SELECT *
FROM TABLE
WHERE RIGHT(COLUMN_CODE, 2) = 'AX'
ここでRIGHT( )
は、指定された文字数の文字列の右側の部分を返します。
関数のSQLAlchemy実装はありRIGHT
ますか?
SQLAlchemyで以下を実装できますか?
SELECT *
FROM TABLE
WHERE RIGHT(COLUMN_CODE, 2) = 'AX'
ここでRIGHT( )
は、指定された文字数の文字列の右側の部分を返します。
関数のSQLAlchemy実装はありRIGHT
ますか?
.endswith()
代わりに、次の方法を使用することをお勧めします。
select([tabledef]).where(tabledef.c.column_code.endswith('AX'))
または、マッパー構成とセッションでフィルタリングする場合:
session.query(mappedobject).filter(mappedobject.column_code.endswith('AX'))
メソッドは、column_code.endswith()
特定のエンジンに最適なSQLに変換され、で終わる列の値と一致しますAX
。
sql関数を直接使用する必要がある場合は、いつでも関数発生器を使用して任意のSQL関数を作成できます。RIGHT()
from sqlalchemy.sql.expression import func
select([tabledef]).where(func.right(tabledef.c.column_code, 2) == 'AX')
func.right()
呼び出しはSQL生成レイヤーによって変換されRIGHT(column_code, 2)
ます。
ドキュメントでは明確にされていませんが、sytleを使用して任意の関数を記述できます。SQLAlchemyモジュールによってネイティブに定義する必要はありません。SQLAlchemyは、min、maxなどの一般的な関数を認識しており、それらの関数の中に方言ごとのバリエーションがある場合は、SQLAlchemyがそれを処理します。func.funcname
funcname
ただし、SQLAlchemyが認識しない関数はそのまま渡されます。RIGHT
したがって、次のような必要な関数を使用してSQLステートメントを生成するクエリを作成できます。
>>> from sqlalchemy import func
>>> select([table]).where(func.RIGHT(users.c.column_code, 2)='AX')