sqlalchemy中的RIGHT()函数

时间:2012-11-29 07:50:04

标签: python sqlalchemy

我可以在SQLAlchemy中实现以下内容,

SELECT * FROM TABLE where right(COULUMN_CODE,2) = 'AX'

here RIGHT( ) - 返回具有指定字符数的字符串的右侧部分

是否存在RIGHT函数的SQLAlchemy实现?

2 个答案:

答案 0 :(得分:5)

您最好使用.endswith()方法:

select([tabledef]).where(tabledef.c.column_code.endswith('AX'))

或者,当使用映射器配置和会话进行过滤时:

session.query(mappedobject).filter(mappedobject.column_code.endswith('AX'))

column_code.endswith()方法将转换为适合您的特定引擎的SQL,匹配以AX结尾的列值。

如果 直接使用RIGHT() sql函数,则可以始终使用function generator创建任意SQL函数:

from sqlalchemy.sql.expression import func

select([tabledef]).where(func.right(tabledef.c.column_code, 2) == 'AX')

并且func.right()调用将由SQL生成层转换为RIGHT(column_code, 2)

答案 1 :(得分:1)

文档没有说清楚,但您可以使用func.funcname sytle编写任何函数。 funcname不必由SQLAlchemy模块本地定义。 SQLAlchemy了解常见函数,如min,max等。如果在这些函数中有方言变体,SQLAlchemy会为你处理。

但SQLAlchemy不知道的函数按传递。因此,您可以创建生成带有所需RIGHT函数的SQL语句的查询,如此

>>> from sqlalchemy import func
>>> select([table]).where(func.RIGHT(users.c.column_code, 2)='AX')