Python、MySQL和一个奇怪的错误
我有一个我不知道如何修复甚至复制的bug: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
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:很高兴它能帮助您:)