pythonのmysqlコネクタを使用して、SQLテーブルの単一のセルで単一の値を更新しようとしています。次のコードを使用すると、エラーメッセージは表示されませんが、テーブルは実際に更新されません。私が更新しようとしているセルの値は時々空で、時にはNULLで、時には文字列を含んでいることがあります。私のコードは以下の通りです:mysqlのpythonモジュールを使用してSQLテーブルを更新する
query = ("UPDATE data_set SET %s = '%s' WHERE id = %s") % (column_to_change, change_to_value, row_id)
私は間違っていますか?
編集:今までの返信をありがとう。私は、別のクエリで同様のコードを実行するのが効果的であるため、周囲のコードに問題があるとは思わない(SQLインジェクションの脆弱性の外で、私はこれを修正しました)。ここに私のコードがあります:
column_to_change = "column2"
change_to_value = "james"
id = "1234"
cnx = mysql.connector.connect(user='user', password='password',
host='db.website.com',
database='database')
cursor = cnx.cursor()
query = ("UPDATE data_set SET %s = %s WHERE policy_key = %s")
cursor.execute(query, (column_to_change, change_to_value, id))
cursor.close()
cnx.close()
これは関連していると、私が挿入しようとしているセルがVARCHAR(45)の形式になっていることがわかります。 (u'James '、)
私はchange_to_value = "(u'James'、)"を設定すると、次のエラーメッセージが表示されます。
mysql.connector.errors.ProgrammingError:1064(42000):SQLシンタックにエラーがあります。 'column1' = '(u \' James \ '、)'の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。WHERE id = '1234' '1行目
hereを参照してください!また、 'commit()'を呼び出しましたか? – mata
いいえ、私はcommit()を呼び出さなかったが、それを追加しただけで、編集で説明したのと同じエラーが表示されます。 –
クエリパラメータのパラメータを使用する必要がありますが、識別子(テーブル名、列名)にパラメータを使用すると、異なる引用符(バッククォート)を使用するため、SQL構文エラーが発生します。 – mata