我该如何在pymysql中开始事务?(MySQL)

13

我希望使用pymysql运行以下mysql脚本。

START TRANSACTION;
BEGIN;
insert into ~~~ 
COMMIT;

我的 Python 源代码是

connection = pymysql.connect(~~~~~~~)
     with connection.cursor() as cursor :
         connection.begin()
         cursor.execute(~~.sql)
         connection.commit()
connection.close()

我的问题是,"connection.begin()"和"START TRANSACTION; BEGIN;"是一样的吗?我想使用"START TRANSACTION; BEGIN;"

2个回答

6
根据PyMySQL文档/示例(单数...这似乎不是一个非常受支持的包)的说法,默认情况下自动提交关闭,因此您需要运行connection.commit()来实际完成事务。
他们的示例:
import pymysql.cursors

connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

    # connection is not autocommit by default. So you must commit to save changes.
    connection.commit()

finally:
    connection.close()

2
谢谢您回答我的问题。我已经使用了connection.commit。但是有时候,数据库会出现“锁等待超时”的情况。因此,我想设置事务开始。 - Bethlee
这在没有事务的MyISAM表中如何工作?如果我们想使用不同的事务模式怎么办? - CMCDragonkai

0

pymysql.connections.Connection.begin

请查看manual以获取更多信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接