1

コメントというフィールドがあります。1つの大きなテーブルから複数のテーブルに値を効果的に読み取ろうとしています。したがって、selectクエリはコメントフィールドをフェッチします。

テーブルからテーブルへのコピーを行うPythonスクリプトを作成しています。一重引用符が原因で、「申し訳ありませんが、注文を処理できません」などのコメントフィールドが見つかった場合、挿入クエリが失敗します。

$引用符を使用してみましたが、無駄です

これが私が試していることです

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost' )
mark=conn.cursor()
/* fectching the rows and doing other stuff */

addthis="insert into my_table(something) values("$$"+str(row[8])+"$$")
mark.execute(addthis)
conn.commit()

助けに感謝します!

4

2 に答える 2

6
  1. 挿入ステートメントでは、プレースホルダーを使用する必要があります。psycopg2の場合はです%s
  2. パラメータを2番目の引数としてに渡す必要がありますexecute()。そうすれば、見積もりの​​問題が発生せず、SQLインジェクション攻撃から保護できます。

例えば:

addthis = "INSERT INTO my_table (something) VALUES (%s);"
mark.execute(addthis, ('a string you wish to insert',))
于 2012-04-14T05:18:13.697 に答える
-3

bernieが提案したように、プレースホルダーを使用できます。これが推奨される方法です。
ただし、プレースホルダーを使用できない場合があります。次に、qoutesを手動でエスケープする必要があります。これは、それらをバックスラッシュすることによって行われます。

addthis="insert into my_table(something) values(%s)" % str(row[8]).replace('"', r'\"').replace("'", r"\'")
mark.execute(addthis)
于 2012-04-14T12:26:47.553 に答える