新しいデータを挿入する前に切り捨てる必要があるMySQL(InnoDB)テーブルがあります。しかし、何らかの理由でINSERTが失敗した場合は、切り捨て前の状態にロールバックしたい(つまり、テーブルを空にすることはできません)。PyMySQL - 複数の文を実行した後のロールバック
Python 3.5.0とPyMySQL 0.7.5を使用して、私は以下を考え出しました。私はそれがTRUNCATEをロールバックすることができているかどうかを確認するために、意図的に失敗させるためにINSERT文でタイプミスをした
import pymysql.cursors
# Connect to the database
connection = pymysql.connect(host='xxx',
user='xxx',
password='xxx',
db='tmp',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor,
autocommit=False)
try:
cursor = connection.cursor()
cursor.execute("TRUNCATE TABLE `users`;")
cursor.execute("ISERT INTO `users` (`email`, `password`) VALUES ('okok', 'foo');")
except:
connection.rollback()
connection.close()
raise
else:
connection.commit()
connection.close()
注意。これはそうではありません。このスクリプトを実行する前にテーブルにデータが含まれていれば、空になります。
私は間違っていますか? TRUNCATEをこのようにロールバックすることは可能ですか?