2017-06-16 84 views
0

我有一個查詢,我知道作品:SQLAlchemy的 - 字符串替換爲複雜的查詢

SELECT title FROM paper WHERE MATCH (title) AGAINST ('+exact +representations' IN BOOLEAN MODE)

這將返回與兩個詞「精確」和「交涉」的任何文件。使用的SQLAlchemy的字符串替換,我做的:

keyword = '+exact +representations' 
sql = 'SELECT title FROM paper WHERE MATCH (title) AGAINST (:keyword IN BOOLEAN MODE)' 
conn = db.engine.connect() 
t = conn.execute(text(sql), keyword=keyword) 

這不匹配只是這兩個關鍵字的文件。相反,它會用任何一個詞返回論文。

我的猜測是SQLAlchemy在其預處理步驟中正在修復keyword。我怎樣才能使用SQLAlchemy的字符串替換功能,但仍然做我想要的?

+0

啓用查詢記錄'create_engine(...,echo = True)'查看發送給MySQL的查詢。 – plaes

+0

你是否試過用'AGAINST(「:關鍵字」IN',你原來的SQL在引號中用你的替換引用。 –

+0

@NigelRen佔位符替換將正確處理引用,不需要手動引用,這是主要賣點 –

回答

0

我能得到使用的SQLAlchemy的內置match功能的解決方案:

keyword = '"exact representations"' 
ids += db.session.query(models.Paper)\ 
    .filter(models.Paper.title.match(keyword))\ 
    .all() 

FWIW,我沒能完全匹配使用'+exact +representations'%的MySQL spec這兩個詞。但是這似乎與SQLAlchemy無關。