Python:执行SQLite语句时的无限循环

时间:2012-06-25 19:46:15

标签: sqlite python-2.7

我有这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()会导致无限循环。任何想法出了什么问题?

2 个答案:

答案 0 :(得分:0)

重写您的Select语句而不选择...(选择...) - 这是非常糟糕的风格。结果可能会解决您的问题。

答案 1 :(得分:0)

如果通过无限循环表示函数不会返回值,我遇到了同样的问题。

Why python+sqlite3 is extremely slow?中找到解决方案。使用大型表时,python 2.7附带的版本会出现性能问题。我通过升级sqlite3解决了这个问题:https://stackoverflow.com/a/3341117/3894804

相关问题