0

私は Sqlite3 テーブルを持っています paste{ paste_id int, paste_content text }

私は update ステートメントを実行する必要があります。ここで、テキストには単一引用符と "" 二重引用符が含まれている可能性があります。Pythonで私が書いた

UPDATE_Statement = "Update paste set paste_content = '%s' where paste_id=id" %(content)

しかし、コンテンツに ' または "" を含めることができるため、実行クエリが正しく機能しません。どうすればこれを適切にエスケープできますか?

4

1 に答える 1

2

文字列補間を使用しないでください。代わりに SQL パラメータを使用します。

UPDATE_Statement = "Update paste set paste_content = %s where paste_id=%s"

cursor.execute(UPDATE_Statement, content)

代わりに、エスケープ (および適切な引用符) をデータベース アダプターに任せます。これ:

  • コードを簡素化
  • さまざまなデータ型を正しく引用する
  • データベースがさまざまなデータに対してクエリ プランを再利用できるようにします
  • SQL インジェクション攻撃を防ぎます

Django SQL ドキュメントのパラメーターの受け渡しraw()を参照してください。

別のデータベース コネクタ (Django によって提供される接続ではない) を使用している場合は、ドキュメントでパラメーター プレースホルダーの特定のスタイルを確認してください。sqlite3たとえば、データベース アダプタはプレースホルダ構文として使用し?ます。

于 2013-08-04T21:58:53.980 に答える