2017-06-16 85 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无关。