mysql.connectorでデータベースを更新できない。エラーもない。

mysql.connector (mysql-connector-python) を使ってデータベースを更新しようとしたら、データベースが全然更新されない…。エラーもなくプログラムは正常に終了する…

原因は autocommit

mysql.connectorconnectメソッドは、パラメーターとしてautocommitを持っており、(理由はよく知らないが)デフォルトはFalseに設定されている。

autocommitは、MySQLでトランザクションを開始していないときのクエリーの挙動を決める機能。autocommitが有効だとクエリーを発行するごとにデータベースに反映されるが、無効の場合は明示的なコミットがあるまで反映が保留される(自動トランザクション)。

そして自分は、connectメソッドにautocommitパラメーターがあることを知らなかったうえに、当然autocommitは有効だろうという思い込みでずっと空振りしていた。

対策

connectメソッドを呼び出すときにautocommit=Trueとしてやれば、クエリーごとにデータベースに反映される。

autocommitを使わず、明示的なトランザクションの開始やコミットで対処することもできる。