2016-12-23 18 views
1

forループでmysqlテーブルを更新しようとしています。スクリプトを実行すると、次のmysqlエラーが表示されます。PythonのMySqlアップデートの問題

Traceback (most recent call last): File "index.py", line 190, in main() File "index.py", line 167, in main pre_cursor.execute(query, (box_percentage, shelf_number, test_number)) File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 205, in execute self.errorhandler(self, exc, value) File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defau lterrorhandler raise errorclass, errorvalue _mysql_exceptions.InterfaceError: (0, '')

for ip in ip_address: 

    arg_list = [] 
    action ="QuotaInfo" 
    arg_list.append(upnp_path) 
    arg_list.append(' --action=') 
    arg_list.append(action) 
    arg_list.append(' --ip=') 
    arg_list.append(ip) 

    ip_address_count = ip_address_count - 1 

    print "Ip adress is counting", ip_address_count 

    if ip_address_count == 0: 
     break 


    command = ['python', arg_list] 

    #Export the result of the subprocess to output variable 

    p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT) 

    output = p.stdout.read() 


    # max_size_search = re.search(r'(quotaInfoMaxsize)\W+:\W+(\d+)', output) 

    # if max_size_search: 
    #  max_size = max_size_search.group() 
    #  max_size_digit = int(filter(str.isdigit, max_size)) 
    #  max_size_digit_gb = float(max_size_digit/1048576) 
    #  # print "Max size of the box is:" , max_size_digit 


    # used_size_search = re.search(r'(quotaInfoUsedsize)\W+:\W+(\d+)', output) 

    # if used_size_search: 
    #  used_size = used_size_search.group() 
    #  used_size_digit = int(filter(str.isdigit, used_size)) 
    #  used_size_digit_gb = float(used_size_digit/1048576) 
    #  # print "Used size of the box is: ", used_size_digit 


    # box_in_use_percentage = int(math.ceil((used_size_digit_gb * 100)/(max_size_digit_gb))) 

    # print "Box in use percentage:", box_in_use_percentage 

    # box_percentage = 100 - box_in_use_percentage 

    # print "box percentage", box_percentage 


    box_percentage = 97 

    test_shelf_no = re.search(r"(\d+$)+", ip) 

    shelf_number = int(test_shelf_no.group(1)) 

    print "Shelf number", shelf_number 



    #prepare a cursor object using cursor method 
    pre_cursor = db.cursor() 

    #Query must be string, execute method does not support tuples 

    query = "UPDATE results_stbs SET pre_planner_percentage = %s WHERE shelf_no = %s AND results_test_id = %s" 

    pre_cursor.execute(query, (box_percentage, shelf_number, test_number)) 

    db.commit() 

    db.close() 

どれでも理解されるであろうことができます。

+2

ループの最後にDB接続(カーソルだけでなく)をクローズしています。 –

+0

ありがとう@mp – pydev

答えて

1

ループ内のDB接続を閉じないでください。また、ループ内でcommitを実行する必要もありません。

関連する問題