mysql.connector
(mysql-connector-python) を使ってデータベースを更新しようとしたら、データベースが全然更新されない…。エラーもなくプログラムは正常に終了する…
原因は autocommit
mysql.connector
のconnect
メソッドは、パラメーターとしてautocommit
を持っており、(理由はよく知らないが)デフォルトはFalse
に設定されている。
autocommit
は、MySQLでトランザクションを開始していないときのクエリーの挙動を決める機能。autocommit
が有効だとクエリーを発行するごとにデータベースに反映されるが、無効の場合は明示的なコミットがあるまで反映が保留される(自動トランザクション)。
そして自分は、connect
メソッドにautocommit
パラメーターがあることを知らなかったうえに、当然autocommit
は有効だろうという思い込みでずっと空振りしていた。
対策
connect
メソッドを呼び出すときにautocommit=True
としてやれば、クエリーごとにデータベースに反映される。
autocommit
を使わず、明示的なトランザクションの開始やコミットで対処することもできる。