2015-12-30 3 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

Я не уверен, однако, что 'зиЬзЬг (?, 1, 8)', как правило, длина 6 (как 'STRING') – van

+0

Оригинальная строка была длина из 8, моя ошибка. Отлично, спасибо! – asyndrige

Смежные вопросы