python pymysql 设置 autocommit false 失败

4 投票
1 回答
5706 浏览
提问于 2025-04-17 12:51

我的脚本从一个文件中读取MYSQL的更新查询,然后应该通过设置autocommit = 0一次性执行这些查询。但是,如果我去掉了conn.commit(),它还是一个一个地执行,尽管我并没有提交。这个错误出在哪里呢?

import pymysql
conn = pymysql.connect(host='x', unix_socket='/tmp/mysql.sock',user='x', passwd='x', db='x')
fileHandle = open ( 'mysqlout.txt' )
fileList = fileHandle.readlines()
fileHandle.close()
i = 1
weiter = input("Execute MYSQL file? ")
if (weiter == 'y'):
    cur = conn.cursor()
    cur.execute('SET autocommit = 0')
    conn.commit()
    for fileLine in fileList: #-----each line is an UPDATE...query
        cur.execute(fileLine)
        i = i + 1
        print(i," ---",round(i / len(fileList),3))
#conn.commit()
conn.close()

1 个回答

7

在MySQL中,MyISAM存储引擎不支持事务。只有InnoDB支持ACID事务。

引用一下MySQL文档中的事务和原子操作

从事务的角度来看,MyISAM表实际上总是以 autocommit = 1模式运行。

你应该检查一下你的表使用的存储引擎

mysql> SELECT table_name,engine FROM INFORMATION_SCHEMA.TABLES 
       WHERE table_schema=DATABASE();
+--------------+--------+
| table_name   | engine |
+--------------+--------+
| stats        | MyISAM |
+--------------+--------+
1 row in set (0.00 sec)

将表移动到一个支持事务的MySQL存储引擎

撰写回答