I have written a python daemon that continuously polls a mysql database. It works fine when I continuously connect and reconnect to the database between queries as follows:
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
But when I try to keep the database connection open (as below) I get an empty query, even though, while it is running I can query the db manually, give it the same query and get the result I expect.
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
I have tried everything to understand why it would do this:
- disabled query cache and added random x=x to the query in case mysql cache was confused by the similar queries
- enabled mysql query logging: the query comes through but still returns an empty set
- moved cursor.connect to database.connect, and back into getData(), no difference
I would love a clue as to what I am not understanding.
def getData();should be a colon.self.cursor.fetchall()returnNonethe first time through thewhile-loop, or after many passes?