Ich habe eine MySQL (InnoDB) -Tabelle, die ich vor dem Einfügen neuer Daten abschneiden muss. Wenn jedoch der INSERT aus irgendeinem Grund fehlschlägt, möchte ich auf den Zustand vor dem Abschneiden zurücksetzen (d. H. Die Tabelle darf nicht leer sein).PyMySQL - Rollback nach Ausführung mehrerer Anweisungen
Mit Python 3.5.0 und PyMySQL 0.7.5 habe ich Folgendes gefunden.
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()
Bitte beachte, dass ich einen Tippfehler in der INSERT-Anweisung gemacht habe, um es absichtlich nicht übermitteln, zu überprüfen, ob die TRUNCATE zurückgerollt werden. Dies ist nicht der Fall, wenn die Tabelle Daten enthält, bevor ich dieses Skript ausführe, ist es leer.
Was mache ich falsch? Ist es möglich, einen TRUNCATE auf diese Weise zurückzusetzen?