Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python、MySQL和一个奇怪的错误_Python_Mysql - Fatal编程技术网

Python、MySQL和一个奇怪的错误

Python、MySQL和一个奇怪的错误,python,mysql,Python,Mysql,我有一个我不知道如何修复甚至复制的bug: query = "SELECT id, name FROM names ORDER BY id" results = database.execute(query) 其中类数据库包含: def execute(self, query): cursor = self.db.cursor() try: cursor.execute(query) return cursor.fetchall() e

我有一个我不知道如何修复甚至复制的bug:

query = "SELECT id, name  FROM names ORDER BY id"
results = database.execute(query)
其中类
数据库
包含:

def execute(self, query):
    cursor = self.db.cursor()
    try:
        cursor.execute(query)
        return cursor.fetchall()
    except:
        import traceback
        traceback.print_exc(file=debugFile)
        return []
以下是我打开数据库连接的方式:

self.db = MySQLdb.connect(
    host=mysqlHost,
    user=mysqlUser,
    passwd=mysqlPasswd,
    db=mysqlDB
)
这是错误的堆栈跟踪:

File "foo.py", line 169, in application results = config.db.execute(query)
File "Database.py", line 52, in execute
     return cursor.fetchall()
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 340, in fetchall
     self._check_executed()
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 70, in _check_executed
     self.errorhandler(self, ProgrammingError, "execute() first")
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler
     raise errorclass, errorvalue
ProgrammingError: execute() first

你知道为什么会发生这种情况吗?我该如何解决?我在互联网上搜索,发现原因可能是有两个游标,但我只有一个。

在您的回溯中尝试以下内容,这是为了调试:

except ProgrammingError as ex:
    if cursor:
        print "\n".join(cursor.messages) 
        # You can show only the last error like this.
        # print cursor.messages[-1]
    else:
        print "\n".join(self.db.messages)
        # Same here you can also do.
        # print self.db.messages[-1]

您应该始终捕捉特定的错误;不要使用
,除非:
。这将捕获键盘中断之类的内容。谢谢,这很有帮助。我发现错误是“MySQL服务器死机”,我搜索了可能的问题。似乎在查询和数据库连接之后,我必须关闭游标(我相信MySQL会在超时后自动关闭)。@Laurențiu Dascălu:很高兴它能帮助您:)