使用python2.7和MySQLdb我希望有一个无限的线程,可以不时地执行SELECT查询。似乎只考虑了第一个SELECT,当我在我的表中对数据进行修改以获得或多或少的结果时,这些数据永远不会改变。
这是我的方法:
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
数据库的连接是在__init__和我关闭线程时的结束时进行的。
这是日志
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),)
如果我将此条目的nbErrors从4更改为12,结果保持不变,但查询不应该得到此结果。
我试图在__init__处打开光标而不是关闭它没有帮助。有什么建议吗?
答案 0 :(得分:0)
我解决了我的问题,我在cursor.fetchall()
之后添加了self.db.commit()谢谢!