Я строю инструкцию SQL как строковый литерал и передаю его методу выполнения SQLAlchemy. Чтобы избежать инъекции SQL, я использовал держатель места, но он не работает хорошо. Когда я использовал специальные слова типа "!" И ", это стало ошибкой. ps Я использую колбу-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 - это слова поиска, и если ключевое слово включает специальные слова, такие как "!" и "это становится ошибкой...
Это сообщение об ошибке, оно содержит японский язык из-за моей машинной среды.
ProgrammingError: (ProgrammingError) tsquery内の構文エラー: "USA!"
"SELECT count(*) FROM mytable, to_tsquery('english',%(kstr)s) query WHERE query @@ tsv " {'kstr': u'USA!'}
Теперь, я скепинг NG слова как это.
keyquery = .replace("!'","").replace('$','')......
Но, таким образом, я не могу искать слова, содержащие специальные слова, такие как "США!". Как я могу решить проблему?
Попробуйте plainto_tsquery()
вместо to_tsquery()
. Соответствующая полнотекстовая поисковая документация PostgreSQL.