gpt4 book ai didi

mysql - PyMySQL - 执行多条语句后回滚

转载 作者:可可西里 更新时间:2023-11-01 07:32:19 30 4
gpt4 key购买 nike

我有一个 MySQL (InnoDB) 表,我需要在插入新数据之前截断它。但是,如果 INSERT 由于任何原因失败,我想回滚到截断之前的状态(即表不能为空)。

使用 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?

最佳答案

因此,根据 Arthur 的回答,这是有效的脚本:

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("DELETE FROM `users`;")
cursor.execute("INSERT INTO `users` (`email`, `password`) VALUES ('okok', 'foo');")
except:
connection.rollback()
connection.close()
raise
else:
connection.commit()
connection.close()

再次感谢您!

关于mysql - PyMySQL - 执行多条语句后回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38378844/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com