Python MySQLdb从无限线程中选择新数据

时间:2017-01-04 16:39:59

标签: python multithreading mysql-python

使用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__处打开光标而不是关闭它没有帮助。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题,我在cursor.fetchall()

之后添加了self.db.commit()

谢谢!