2012-03-13 5 views
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('$','')...... 

しかし、この方法では、「アメリカ」のような特別な単語を含む単語は検索できません。 問題を解決するにはどうすればよいですか?

+0

単純なSQLを使用する理由は、DBのAPIを直接使用するだけではないのですか?ちょうどsqlalchemyをスキップします。 – Keith

答えて

関連する問題