web-dev-qa-db-ja.com

Python mySQL-引用符のエスケープ

私はこのウェブサイトでこの質問がさまざまな方法で尋ねられるのを見ましたが、どれも私の問題に正確に対処していませんでした。

中に一重引用符が含まれるSQLステートメントがあり、それを使用してデータベースクエリを実行する前に、推奨される方法を使用しようとしています。つまり、ステートメントは次のようになります

val2="abc 'dostuff'" 
sql="INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s,'%s')" %(val1, val2)
a_cursor.execute(sql)

しかし、これを実行すると、取得します。

ProgrammingError: (1064,"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dostuff'.

私は何が間違っているのですか?どうもありがとうヌプール

14
Nupur

文字列補間の代わりにパラメータを使用して、値がデータベースコネクタによって適切にエスケープされるようにします。

sql = "INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s, %s)"
a_cursor.execute(sql, (val1, val2))

Mysqldb sqlパラメータースタイルは、python文字列フォーマット演算子で使用されるものと同じ構文を使用しますが、これは少し混乱します。

42
Martijn Pieters