python pymysql set autocommit false терпит неудачу - PullRequest
3 голосов
/ 11 февраля 2012

мой скрипт читает запросы MYSQL UPDATE из файла, а затем должен выполнить их сразу, используя 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 Ответ

4 голосов
/ 11 февраля 2012

Транзакции не поддерживаются механизмом хранения MyISAM в MySQL.Только 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 , который поддерживает транзакции.

...