2015-09-10 91 views
0

如何將SQL where子句字符串轉換爲sqlalchemy查詢?我假設我已經知道桌子了。從字符串構建sqlalchemy查詢

我正在構建一個Angular webapp,它打擊數據的Flask API。 Flask使用sqlalchemy來查詢數據庫。 jQuery-QueryBuilder fromSQL(http://querybuilder.js.org/plugins.html#import-export)將過濾器導出爲原始SQL,我想將其傳回api,解析和查詢。

例如:

where_str = "name LIKE '%BOB%' AND fruit != 'pineapple'" 

將被轉換到:

session.query(Table).filter(Table.name.like('%BOB%')).filter(Table.fruit != 'pineapple) 

標記大火,因爲ODO可能是我所需要的。

回答

2

你可以嘗試執行session.query(Table).filter(where_str)。它在SQLAlchemy v0.5.8上爲我工作。 您也可以構建整個SQL語句字符串並使用Connection.execute()方法執行它。無論哪種方式,將SQL語句直接從網頁傳遞到應用程序can be very dangerous

+0

是的我知道你可以執行,但你需要一個完整的SQL語句。我只有聲明的WHERE部分。 – postelrich

+0

您正在使用哪種版本的SQLAlchemy?我們的應用程序仍然運行一個很舊的(0.5.8),但我曾嘗試類似'session.query(Table).filter(where_str)'並且它工作了 –

+0

我使用的是1.0.6,並且您是對的。雖然它可以工作,但它會直接提供使用字符串的警告,並建議使用http://docs.sqlalchemy.org/en/rel_1_0/core/sqlelement.html#sqlalchemy.sql.expression.text,例如'session.query(表).filter(文本(where_str))'。爲了重申Matheus所說的話,讓你的api接受一個SQL字符串並不是很安全,但這是一個單獨的主題。 – postelrich

-1

你並不需要過濾兩次,添加,你可以這樣做:

session.query(Table).filter(Table.name.like('%BOB%'), Table.fruit != 'pineapple) 
+0

好的,謝謝很高興知道,但不是我的問題的答案... – postelrich

+0

是啊對不起,沒有答案,但可能對未來有所幫助:) –