2012-11-29 62 views
0

我可以實現在SQLAlchemy的下面,RIGHT()函數

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

這裏RIGHT() - 返回一個字符串的右側部分,字符

指定數量是否有SQLAlchemy的實現正確的功能?

+0

你的意思是'RIGHT(COLUMN_CODE,2)'應該返回字符串的最後兩個字符嗎? – Bakuriu

+0

是的......但我試圖在條件下使用它 類似的, query.filter(right(coulumn_code,2)=='AX') –

回答

4

你會更好使用.endswith()方法來代替:

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

,或者用過濾時映射器的配置和會話:

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

column_code.endswith()方法將被轉換到任何SQL是最適合您的EN gine,匹配的列值以AX結尾。

您可以隨時使用function generator創建任意SQL函數,如果你使用直接RIGHT() 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)

2

該文檔沒有說清楚,但您可以使用func.funcname編寫任意函數。 funcname不必由SQLAlchemy模塊本地定義。 SQLAlchemy知道像min,max等常用函數,如果有方言來表示這些函數之間的差異,SQLAlchemy會爲您提供幫助。

但SQLAlchemy不知道的函數通過,因爲是。所以,你可以創建你的查詢中包含所需RIGHT功能生成SQL語句,這樣

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