2015-12-30 89 views
1

年初我生的sql語句是這樣的:SQLAlchemy的添加條件來查詢

select if(substr(Table.order_id,1,8)='STRING', Table1.name, t=Table2.type) 

試圖重寫它在SQLAlchemy的查詢:

query = db_session.query(Table,\ 
         Table1.name if Table.order_id[1:8] == 'STRING' else Table2.type) 

但它返回Operator 'getitem' is not supported on this expression

如何在不觸摸模型的情況下將此條件添加到我的ORM查詢中?

或者我該如何在查詢參數中添加原始sql語句?

PS:我寧願不要對模型進行任何更改。

回答

2

您需要使用Functions

from sqlalchemy import func 

q = db_session.query(
    func.IF(func.substr(Table.order_id, 1, 8) == 'STRING', Table1.name, Table2.type) 
) 
+0

我不知道但是,這種'SUBSTR(?,1,8)'通常是6長度(如'STRING') – van

+0

原始字符串長度爲8,我的錯誤。很好,謝謝! – asyndrige