我有一個MySQL(InnoDB)表,我需要在插入新數據之前截斷表。但是,如果INSERT因任何原因失敗,我想回滾到截斷前的狀態(即表不能爲空)。PyMySQL - 執行多條語句後回滾
使用Python 3.5.0和PyMySQL 0.7.5,我想出了以下內容。
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()
注意,我做了一個錯字在INSERT語句中,以使其失敗的宗旨,以檢查是否TRUNCATE可能被回退。情況並非如此,如果在我運行這個腳本之前表中包含數據,它就會變爲空。
我在做什麼錯?這樣可以回滾TRUNCATE嗎?