【发布时间】:2011-12-06 20:35:59
【问题描述】:
我编写了一个 python 守护程序,它不断地轮询 mysql 数据库。当我在查询之间连续连接并重新连接到数据库时,它工作正常,如下所示:
def connect(self):
self.connection = MySQLdb.connect(...)
self.cursor = self.connection.cursor()
return self.cursor
def disconnect(self): ...
self.cursor.close()
self.connection.close()
def getData(); ....
sqlcmd = """SELECT ...."""
self.cursor.execute (sqlcmd % (params))
result = self.cursor.fetchall()
return result
if __name__ == "__main__":
db = prepaid_db.Database()
while 1:
dbConnection = db.connect()
data = db.getData()
... do stuff
db.disconnect
但是当我尝试保持数据库连接打开时(如下所示),我得到一个空查询,尽管在它运行时我可以手动查询数据库,给它相同的查询并得到我期望的结果。
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
我已经尝试了一切来理解它为什么会这样做:
- 禁用查询缓存并在查询中添加随机 x=x,以防 mysql 缓存被类似查询混淆
- 启用 mysql 查询日志记录:查询通过但仍返回一个空集
- 将 cursor.connect 移动到 database.connect,然后返回 getData(),没有区别
我很想知道我不明白的地方。
【问题讨论】:
-
def getData();中的分号应该是冒号。 -
self.cursor.fetchall()是第一次通过while-loop还是在多次通过后返回None? -
- 是的冒号,对不起,简单的错字
-
- 它在第一次打开时给出了正确的答案,但在 while 循环期间却没有。西蒙在下面的回答解决了这个问题并且非常有意义。
-
你读懂了我的想法,我遇到了同样的问题,但没想到其他人会遇到它:D