我可以在SQLAlchemy中实现以下内容,
SELECT * FROM TABLE where right(COULUMN_CODE,2) = 'AX'
here RIGHT( )
- 返回具有指定字符数的字符串的右侧部分
是否存在RIGHT函数的SQLAlchemy实现?
答案 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')