2017-01-04 5 views
0

Mit Python2.7 und MySQLdb möchte ich einen unendlichen Thread haben, der eine SELECT-Abfrage von Zeit zu Zeit durchführt. Es scheint, dass das einzige erste SELECT in Betracht gezogen wird, wenn ich die Daten in meiner Tabelle modifiziere, um mehr oder weniger Ergebnisse zu erhalten, die sich niemals ändern.Python MySQLdb wählt frische Daten aus einem unendlichen Thread aus

Hier ist meine Methode:

def getUrlsToCrawl(self): 
    dateNowUtc = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S") 
    cursor = self.db.cursor() 
    cursor.execute('SELECT id, url, nbErrors FROM mytable WHERE nbErrors < %s AND domain = %s and nextCrawl < %s', (self.MAX_RETRY, self.domain, dateNowUtc)) 
    print cursor._last_executed 
    urls = cursor.fetchall() 
    print urls 
    cursor.close() 
    return urls 

Die Verbindung zur Datenbank im __init__ und das Schließen gemacht wird, wenn ich meinen Thread zu töten.

Und hier ist das Protokoll

SELECT id, url, nbErrors FROM mytable WHERE nbErrors < 10 AND domain = 'foo.com' and nextCrawl < '2017-01-04T16:33:52' 
((6L, u'http://www.foo.com/foo.php', 4L),) 

SELECT id, url, nbErrors FROM mytable WHERE nbErrors < 10 AND domain = 'foo.com' and nextCrawl < '2017-01-04T16:33:59' 
((6L, u'http://www.foo.com/foo.php', 4L),) 

SELECT id, url, nbErrors FROM mytable WHERE nbErrors < 10 AND domain = 'foo.com' and nextCrawl < '2017-01-04T16:34:06' 
((6L, u''http://www.foo.com/foo.php'', 4L),) 

SELECT id, url, nbErrors FROM mytable WHERE nbErrors < 10 AND domain = 'foo.com' and nextCrawl < '2017-01-04T16:34:13' 
((6L, u''http://www.foo.com/foo.php'', 4L),) 

Wenn ich nbErrors von 4 bis 12 für diesen Eintrag ist das Ergebnis das gleiche bleiben, aber die Abfrage erhalten soll dieses Ergebnis nicht ändern.

Ich habe versucht, den Cursor an der __init__ zu öffnen und nicht zu schließen, hat nicht geholfen. Irgendein Vorschlag?

+0

Was zeigt es, wenn Sie es drucken? –

+0

wenn ich den Cursor drucke? '' der Speicher ändert jeden Anruf – RogerFromSpace

+0

Nein, ich meine: 'print urls' –

Antwort

0

löste ich mein Problem meine Zugabe self.db.commit() nach cursor.fetchall()

Dank!