Python、MySQL 和一个奇怪的错误
我遇到了一个我不知道怎么修复或者复现的bug:
query = "SELECT id, name FROM names ORDER BY id"
results = database.execute(query)
这个类叫做 Database
,里面包含了:
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
你有什么想法,为什么会发生这种情况,以及我该如何修复它吗?我在网上查了一下,发现可能的原因是有两个游标,但我只有一个。
1 个回答
3
在你的错误追踪中试试这个,它是用来调试的:
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]