2017-12-13 10 views
2

ODBC(Python ODBCモジュール)を使用してMS Accessに接続しています。 DBに値を入れるコードの一部があります。このようになります。Python - SQL文の特殊文字

for item in changes: 
    format_str = """INSERT INTO changes (short_description) VALUES ('{short_description}');""" 
    sql_command = format_str.format(short_description =item.short_description) 
    cursor.execute(sql_command) 
    cursor.commit() 

問題は、それがsyttaxtエラーを返すということです。

pypyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 

私は1例のために、私はこのようなSHORT_DESCRIPTIONを持っているので、それがあることがわかった。

The Service Request status is not changing to \"OPEN', once dispatched to another group

問題はOPENの後の "'"です。

ここをクリックしてください。実際に私が見る文字列は次のとおりです。

The Service Request status is not changing to "OPEN', once dispatched to another group

"\"の文字列データを扱うアプリケーションのAPIから取得した文字列です。エスケープ文字列に "\"を追加しますが、どこにでも追加することはできません。

質問は - それを解決する最も簡単な方法は何ですか? 理論的には不要な記号を取り除くことができますが、それをそのまま保ちたい場合はどうしたらいいですか?

その他の場合はすべて問題ありません。

答えて

5

は、SQLインジェクションを防ぐためにparametersを使用するようにすべきである:

for item in changes: 
    sql_command = """INSERT INTO changes (short_description) VALUES (?);""" 
    cursor.execute(sql_command, (item.short_description,)) 
    cursor.commit() 
+0

これは、問題を解決しました。ありがとう – rdr