我有一个我知道有效的查询:
SELECT title FROM paper WHERE MATCH (title) AGAINST ('+exact +representations' IN BOOLEAN MODE)
这将返回任何带有“exact”和“representations”字样的论文。使用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 :(得分:0)
我能够使用SQLAlchemy的内置match
函数获得解决方案:
keyword = '"exact representations"'
ids += db.session.query(models.Paper)\
.filter(models.Paper.title.match(keyword))\
.all()
FWIW,根据MySQL spec,我无法使用'+exact +representations'
完全匹配这两个字。但这似乎与SQLAlchemy无关。