我有这2个SQLite脚本: 两者都通过直接输入SQLite进行测试。
def getOutgoingLinks(self, hostname):
t = (hostname,)
result = self.__cursor.execute("SELECT url.id, hostname.name, url.path, linking_to.keyword, siteId.id " +
"FROM url, hostname, linking_to, " +
"(SELECT url.id FROM url, hostname " +
"WHERE hostname.name = (?) " +
"AND hostname.id = url.hostname_id " +
") AS siteId " +
"WHERE linking_to.from_id = siteId.id " +
"AND linking_to.to_id = url.id " +
"AND url.hostname_id = hostname.id", t)
result = result.fetchall()
return result
def getIncommingLinks(self, hostname):
t = (hostname,)
result = self.__cursor.execute("SELECT url.id, hostname.name, url.path, linking_to.keyword, siteId.id " +
"FROM url, hostname, linking_to, " +
"(SELECT url.id FROM url, hostname " +
"WHERE hostname.name = (?) " +
"AND hostname.id = url.hostname_id " +
") AS siteId " +
"WHERE linking_to.to_id = siteId.id " +
"AND linking_to.from_id = url.id " +
"AND url.hostname_id = hostname.id", t)
result = result.fetchall()
return result
getIncommingLinks()
methond工作得非常好,但是当python尝试执行SQL语句时,getOutgoingLinks()
会导致无限循环。任何想法出了什么问题?
答案 0 :(得分:0)
重写您的Select语句而不选择...(选择...) - 这是非常糟糕的风格。结果可能会解决您的问题。
答案 1 :(得分:0)
如果通过无限循环表示函数不会返回值,我遇到了同样的问题。
在Why python+sqlite3 is extremely slow?中找到解决方案。使用大型表时,python 2.7附带的版本会出现性能问题。我通过升级sqlite3解决了这个问题:https://stackoverflow.com/a/3341117/3894804