3

SQLAlchemyで以下を実装できますか?

SELECT * 
FROM TABLE 
WHERE RIGHT(COLUMN_CODE, 2) = 'AX'

ここでRIGHT( )は、指定された文字数の文字列の右側の部分を返します。

関数のSQLAlchemy実装はありRIGHTますか?

4

2 に答える 2

6

.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)ます。

于 2012-11-29T08:39:56.697 に答える
2

ドキュメントでは明確にされていませんが、sytleを使用して任意の関数を記述できます。SQLAlchemyモジュールによってネイティブに定義する必要はありません。SQLAlchemyは、min、maxなどの一般的な関数を認識しており、それらの関数の中に方言ごとのバリエーションがある場合は、SQLAlchemyがそれを処理します。func.funcnamefuncname

ただし、SQLAlchemyが認識しない関数はそのまま渡されますRIGHTしたがって、次のような必要な関数を使用してSQLステートメントを生成するクエリを作成できます。

>>> from sqlalchemy import func
>>> select([table]).where(func.RIGHT(users.c.column_code, 2)='AX')
于 2012-11-29T08:09:03.937 に答える