2012-02-11 27 views
3

myスクリプトはMYSQL UPDATEクエリをファイルから読み込み、autocommit = 0を使用してそれらを一度に実行する必要があります。conn.commit()を削除してもコミットしていません。エラーはどこですか? python pymysql set autocommit falseが失敗する

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() 
+0

は、上記のコードはすべて正しいですか?ありがとうございます。 – user670186

答えて

4

MySQLのMyISAMストレージエンジンでは、トランザクションはサポートされていません。 InnoDBのみがACIDトランザクションをサポートします。 Transactions and Atomic Operations MySQL documentationを引用

トランザクションの用語では、MyISAMテーブルは事実常に= 1モード 自動コミットで動作します。

あなたべきcheck storage engine for your tables

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 storage engineします。

+0

私はMyISAMエンジンを持っています。それを変換することはできますか、別のエンジンを使用して新しいデータベース/テーブルを作成してデータをインポートする必要がありますか? – user670186

+0

[ALTER TABLE t1 ENGINE = InnoDB:](http://dev.mysql.com/doc/refman/5.1/en/alter-table.html) – danihp

+0

それでも動作しませんでした。まだ各クエリを1つずつ実行します – user670186

関連する問題