SQLAlchemy占位符不能很好地工作

时间:2012-03-13 00:24:17

标签: python postgresql sqlalchemy

我将SQL语句构造为字符串文字,并将其传递给SQLAlchemy execute方法。 为了避免SQL注入,我使用了占位符,但它不能正常工作。 当我使用“!,&”这样的特殊词语时,就会出错。 p.s我使用flask-sqlalchemy

这是代码。

sql = ""
sql += "SELECT count(*) "
sql += "FROM mytable, to_tsquery('english',%(kstr)s) query "
sql += "WHERE query @@ tsv "
res = db.engine.execute(sql, kstr = keyquery)

keyquery是搜索词,如果keyquery包含特殊词,如'!,&' 它变成了错误......

这是错误消息,因为我的机器环境,它包含日语。

ProgrammingError: (ProgrammingError) tsquery内の構文エラー: "USA!"
"SELECT count(*) FROM mytable, to_tsquery('english',%(kstr)s) query WHERE query @@ tsv " {'kstr': u'USA!'}

现在,我正在将NG字翻译为。

keyquery = .replace("!'","").replace('$','')......

但是,通过这种方式,我无法搜索包含特殊单词的单词,例如“USA!” 我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

尝试使用plainto_tsquery()代替to_tsquery()。相关的PostgreSQL full text search documentation