【问题标题】:MySql update issue in PythonPython中的MySql更新问题
【发布时间】:2017-05-08 23:59:27
【问题描述】:

我正在尝试使用 for 循环更新 mysql 表。当我运行我的脚本并给我以下 mysql 错误时,它只更新一行;

Traceback(最近一次调用最后一次):文件“index.py”,第 190 行,在 main() 文件“index.py”,第 167 行,在 main pre_cursor.execute(查询,(box_percentage,shelf_number,test_number))文件 “C:\Python27\lib\site-packages\MySQLdb\cursors.py”,第 205 行,在 执行 self.errorhandler(self, exc, value) 文件“C:\Python27\lib\site-packages\MySQLdb\connections.py”,第 36 行,在 默认错误处理程序 引发错误类,错误值 _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()

任何帮助将不胜感激。

【问题讨论】:

  • 您在循环结束时关闭数据库连接(不仅仅是光标)。

标签: python mysql


【解决方案1】:

不要关闭循环内的数据库连接。而且您不必在循环内执行commit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2017-03-12
    • 2014-03-20
    • 2016-09-03
    • 2014-07-19
    相关资源
    最近更新 更多