我可以在 SQLAlchemy 中实现以下内容吗?
SELECT *
FROM TABLE
WHERE RIGHT(COLUMN_CODE, 2) = 'AX'
此处RIGHT( )
返回具有指定字符数的字符串的右侧部分。
是否有该RIGHT
函数的 SQLAlchemy 实现?
我可以在 SQLAlchemy 中实现以下内容吗?
SELECT *
FROM TABLE
WHERE RIGHT(COLUMN_CODE, 2) = 'AX'
此处RIGHT( )
返回具有指定字符数的字符串的右侧部分。
是否有该RIGHT
函数的 SQLAlchemy 实现?
您最好使用以下.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()
调用将由RIGHT(column_code, 2)
SQL 生成层翻译。
文档没有说清楚,但是您可以使用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')