Ho scritto un demone python che esegue il polling continuo di un database mysql. Funziona bene quando ho continuamente collegare e riconnettersi al database tra le query come segue:Python MySQLdb vuota la query di selezione anche se l'esecuzione manuale della query fornisce risultati
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
Ma quando cerco di mantenere la connessione al database aperto (come sotto) ottengo una query vuota, anche se, mentre è eseguendo posso interrogare il db manualmente, dargli la stessa query e ottenere il risultato che mi aspetto.
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
Ho provato di tutto per capire il motivo per cui avrebbe fatto questo:
- la cache disabilitata interrogazione e ha aggiunto casuali x = x alla query nella cache caso MySQL è stato confuso dalle query simili
- abilitata la registrazione delle query mysql: la query arriva ma restituisce ancora un set vuoto
- spostato cursor.connect in database.connect e di nuovo in getData(), nessuna differenza
Mi piacerebbe un indizio su cosa non sto capendo.
Il punto e virgola in 'def getData();' deve essere due punti. – unutbu
'self.cursor.fetchall()' restituisce 'None' la prima volta attraverso il' while-loop', o dopo molti passaggi? – unutbu
- sì sul colon, mi spiace, semplice errore di battitura –