不使用事务的python-mysqldb

2 投票
1 回答
1587 浏览
提问于 2025-04-18 09:08

我在学习Python的MySQLdb是如何处理事务的。在这个教程中,它提到:

在Python的数据库API中,我们并不需要调用BEGIN语句来开始一个事务。事务是在创建游标时自动开始的。

所以接下来的这一行:

cur = con.cursor()

会隐式地开始一个事务。它还提到:

我们必须用commit()或rollback()方法来结束一个事务。

我理解得对吗?也就是说MySQLdb总是使用事务,并且没有办法关闭这种行为?强制用户把所有查询都放在事务里似乎有点奇怪。如果真是这样,有什么解释吗?

1 个回答

2

我不是这方面的专家,但我觉得你想要的功能是自动提交(autocommit)。这个功能会自动提交你的命令,所以你可以省略 'BEGIN' 这个语句。

这里有一页相关的内容:http://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

你可以在启动 Python 的 MySQLdb 实例时设置这个功能:

conn=MySQLdb.connect(host='blah', autocommit=True)

这样你就可以得到一个不需要担心事务的连接了。

有些存储引擎不使用事务,所以如果你用的是这些引擎,就不用担心这个细节:en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines

不过,如果你的插入或更新操作在中途失败,可能会遇到一些问题!

撰写回答