无法多次获得mysql结果

时间:2019-12-26 22:07:54

标签: python mysql sql loops

我正竭尽全力让我的套接字服务器python脚本如此频繁地循环以检查mysql表中的更新。

该代码在第一次使用时没有问题。在第二个循环上,然后在每个循环后抛出错误。
我尝试过的事情:

  • 尝试/捕获(用于多次循环以查看是否有任何作用)

  • 线程

  • conn.close()

  • cursor.close()(不是cursor.commit()的任何更改,因此通过 错误)

但是,我可以将代码放在一个独立的文件中,然后通过垃圾邮件运行该文件,它可以完美运行。 似乎不喜欢在同一进程或文件中运行sql代码(我认为线程已修复,但我想我错了?)

这是错误:(请注意第一行是我试图在循环中打印以进行测试的输出)

(17, 'Default2', 1, 'uploads/2/projects/5e045c87109820.19290695.blend', '')
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "D:\xampp\htdocs\urender\serverfiles\test.py", line 7, in func
    fqueue = queuedb.checkQueue()
  File "D:\xampp\htdocs\urender\serverfiles\queuedb.py", line 7, in checkQueue
    cursor = conn.cursor()
  File "C:\Users\hackn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\mysql\connector\connection.py", line 806, in cursor
    self.handle_unread_result()
  File "C:\Users\hackn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\mysql\connector\connection.py", line 1059, in handle_unread_result
    raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found

[Finished in 6.727s]

这是来自test.py的基本代码:

import queuedb
from threading import Thread
import time

def func():
    time.sleep(5)
    fqueue = queuedb.checkQueue()
    return fqueue
    func()

fqueue = queuedb.checkQueue()
print(fqueue)

Thread(target=func).start()

这是从我的queuedb.py中获得的:

from dbconnect import dbconnect
import sys

def checkQueue():
    sql = "SELECT * FROM renderqueue WHERE renderer=''"
    conn = dbconnect.conn
    cursor = conn.cursor()

    cursor.execute(sql)
    result = cursor.fetchone()

    return result

这是dbconnect.py:

import mysql.connector
import sys
from xml.dom import minidom

def parseXML():
    try:
        xmlpath = "urender/serverfiles/dbvariables.xml"
        mydoc = minidom.parse(xmlpath)
        items = mydoc.getElementsByTagName('item')
        dbserver = items[0].attributes['dbserver'].value
        dbuser = items[1].attributes['dbuser'].value
        dbpass = items[2].attributes['dbpass'].value
        dbname = items[3].attributes['dbname'].value
        return dbserver, dbuser, dbpass, dbname
    except:
        print("Something went wrong with the XML DATA")
        sys.exit()

dbserver = parseXML()[0]
dbuser = parseXML()[1]
dbpass = parseXML()[2]
dbname = parseXML()[3]

class dbconnect:
    conn = mysql.connector.connect(host=dbserver, user=dbuser, passwd=dbpass, database=dbname)

对于这么长的帖子,我感到抱歉,但是我希望我已经很好地解释了这个问题并提供了足够的信息。

1 个答案:

答案 0 :(得分:2)

hckm101,

如异常所示,存在与游标关联的未读行。 为了解决这个问题,您有两种解决方案:

  • 使用缓冲的游标,将您的代码替换为 conn.cursor(buffered=True)
  • 或者,使用类似于for row in cursor: dosomething(row)
  • 的for循环来检索与游标相关的每个结果。

有关更多信息,在线上有大量文档(here