3

我可以在 SQLAlchemy 中实现以下内容吗?

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

此处RIGHT( )返回具有指定字符数的字符串的右侧部分。

是否有该RIGHT函数的 SQLAlchemy 实现?

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()调用将由RIGHT(column_code, 2)SQL 生成层翻译。

于 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 回答