1
SQL文を文字列リテラルとして作成し、SQLAlchemyのexecuteメソッドに渡します。 SQLインジェクションを避けるために、プレースホルダを使用しましたが、うまく機能しません。 「!、&」のような特殊な単語を使用するとエラーになります。 p.sフラスコを使用します。sqlalchemySQLAlchemyのプレースホルダがうまく機能しない
これはコードです。
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語をskkipingしています。
keyquery = .replace("!'","").replace('$','')......
しかし、この方法では、「アメリカ」のような特別な単語を含む単語は検索できません。 問題を解決するにはどうすればよいですか?
単純なSQLを使用する理由は、DBのAPIを直接使用するだけではないのですか?ちょうどsqlalchemyをスキップします。 – Keith