SQLAlchemy - 复杂查询的字符串替换

时间:2017-06-16 04:10:32

标签: mysql sqlalchemy

我有一个我知道有效的查询:

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的字符串替换功能,但仍然按照我的意愿行事?

1 个答案:

答案 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无关。