Pisałem demona Pythona, który nieustannie sonduje bazy danych MySQL. To działa dobrze, kiedy ciągły łączyć się i ponownie połączyć się z bazą danych między zapytaniami następująco:Python MySQLdb pusty kwerenda wybierająca natomiast ręczne wykonanie kwerendy dostarcza wyniki
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
Ale gdy próbuję utrzymać połączenie z bazą danych open (jak poniżej) pojawia się pusty zapytanie, chociaż, gdy jest Uruchamianie Mogę wykonać zapytanie do bazy danych ręcznie, podać to samo zapytanie i uzyskać wynik, którego oczekuję.
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
Próbowałem wszystkiego, aby zrozumieć, dlaczego miałby to zrobić:
- cache zapytań niepełnosprawnych i dodaje losowe X = x do zapytania w sprawie mysql cache był zdezorientowany podobnych zapytań
- włączone rejestrowanie zapytań mysql: zapytanie przychodzi, ale nadal zwraca pusty zestaw
- przeniesione cursor.connect do database.connect iz powrotem do getData(), bez różnicy
Chciałbym wskazówkę, czego nie rozumiem.
Średnik w 'def getData();' powinien być dwukropkiem. – unutbu
Czy 'self.cursor.fetchall()' zwraca 'Brak' po raz pierwszy podczas' while-loop' lub po wielu przejściach? – unutbu
- tak na dwukropek, przepraszam, prosta literówka –