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

标签 mysql python-3.x

我有一个 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/

相关文章:

mysql - mysql 数据库克隆的有效方法/工具

MySQL 外键约束混淆

python - 使用 python 3 的 Selenium 中的 WebDriverException

python - Python3中的打印功能

mysql - 如何编译这个复杂的sql查询

php - 有人有使用 php/mysql 的开发/登台/部署工作流程吗?

php - 将 ORDER 添加到 SELECT 请求

python - 用测试集中的中位数填充 Nan 值

python-3.x - 如何存储词向量嵌入?

集成在 GTK3/PyGObject 中的 Python 网络/tcp 包