0

これは、csv ファイルの読み取りから更新操作を実行するために使用される私の python コードです。これも試してみました。うまくいきません。

for i  in cin:
    try:
        conn=psycopg2.connect("dbname=pharmaflare user=postgres")
        cursor=conn.cursor()
        cursor.execute("UPDATE pharmaflare_drug_interaction SET se_interaction ='%s' WHERE primary_drug ='%s' AND secondary_drug ='%s' AND side_effect ='%s'"%(i[3],i[0],i[1],i[2]))
        conn.commit()
        cursor.close()
        conn.close()
        #print "done",i[0],i[1],i[2],i[3]
    except Exception as e:
        cerr.writerow(i)
        ferr.flush()
        traceback.print_exc(file=sys.stdout)
        continue

ここで、QUOTEの問題による構文エラーのような例外に直面しています。単一引用符が存在する場合、この例外が発生します。

  Traceback (most recent call last):
  File "<ipython console>", line 5, in <module>
  ProgrammingError: syntax error at or near "S"
  LINE 1: ...secondary_drug ='NEUER' AND side_effect ='MENIERE'S DISEASE'

引用符の問題を気にせずにクエリステートメントを定義する別の方法はありますか?

4

1 に答える 1

0

それを解決するにはいくつかの方法があります。これを行う簡単/ハックな方法は、re.escape() 関数を使用することです。この関数は、 PHP の addslashes() 関数と同等と考えることができますが、その比較を行うのは面倒です。

そうは言っても、私の読書は psycopg2 がPEP 249を利用していることを示しています。それが本当なら、パラメータ化されたクエリを渡して、それらをエスケープさせることができるはずです。

于 2012-07-27T15:31:06.493 に答える