我将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!” 我该如何解决这个问题呢?
答案 0 :(得分:1)
尝试使用plainto_tsquery()
代替to_tsquery()
。相关的PostgreSQL full text search documentation。