gpt4 book ai didi

python - 在 PyMySQL 中回滚多个查询

转载 作者:行者123 更新时间:2023-12-05 02:40:56 26 4
gpt4 key购买 nike

有人发布了与此类似的问题,但不幸的是,没有一个建议的解决方案对我有用。

我想看看我是否可以在一个 try 子句中编写两个查询,并在其中一个抛出异常时让它们都回滚。为了确保抛出异常,我只是尝试创建同一个表两次。

def function():
try:
cursor = connection.cursor()

q1 = "CREATE TABLE 0_test_table (column1 varchar(255))"
cursor.execute(q1)

q1 = "CREATE TABLE 0_test_table (column1 varchar(255))"
cursor.execute(q1)

except pymysql.Error as e:
print("Exception encountered")
print(e)
try:
connection.rollback()
except:
print("rollback failed")
pass

else:
connection.commit()
connection.close()

function()

打印的是:

Exception encountered
(1050, "Table '0_test_table' already exists")

由于异常是由查询引发的,而不是由回滚引发的,我认为它一定是回滚了更改。我检查了数据库,表已经创建。为什么回滚不起作用?这也引出了关于 commit 方法的作用的问题。由于我从未在我的代码中访问过 else,因此我从未访问过提交方法,但事情显然已提交。

我试图改编我在 O'Reilly 网站上找到的一个例子 here .这让我有:

def function():
try:
connection.begin()
cursor = connection.cursor()

q1 = "CREATE TABLE 0_test_table (column1 varchar(255))"
cursor.execute(q1)

q1 = "CREATE TABLE 0_test_table (column1 varchar(255))"
cursor.execute(q1)

cursor.close()
connection.commit()

except pymysql.Error as e:
print("Exception encountered")
print(e)
try:
connection.rollback()
except:
print("rollback failed")
pass

function()

再次打印:

Exception encountered
(1050, "Table '0_test_table' already exists")

又一次在数据库中创建了表。

最佳答案

正如您在引用中看到的,无法完成 CREATE TABLEROLLBACK

"The CREATE TABLE statement in InnoDB is processed as a single transaction. This means that a ROLLBACK from the user does not undo CREATE TABLE statements the user made during that transaction."

参见 manual

关于python - 在 PyMySQL 中回滚多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68369288/

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