Python mysqldb fetchmany 无法正常工作

标签 python python-2.7 mysql-python

我有一些这样的代码

if __name__ == '__main__':
    def result_generator(cursor, batch_size=10):
        while True:
            results = cursor.fetchmany(batch_size)
            if not results:
                break
            for res in results:
                yield res

    db = MySQLdb.connect(host="localhost", user="root", passwd="root", db="domains")
    # you must create a Cursor object. It will let
    #  you execute all the queries you need
    cursor = db.cursor()
    cursor.execute("SELECT domain FROM com ORDER BY id ASC")
    for result in result_generator(cursor):
        url = "http://www.{0}".format(result[0])
        print url
        w = Wappalyzer(url)
        out = w.analyze()
        cursor.execute("""UPDATE com SET frameworks=%s, is_checked=1 WHERE domain=%s""",
                       (db.escape_string(out.get('frameworks', "")), result[0]))
    # disconnect from server
    db.commit()
    db.close()

我的result_generator从数据库批量获取域名。批量大小为 10。

我的程序运行良好IF我删除了这一行

cursor.execute("""UPDATE com SET frameworks=%s, is_checked=1 WHERE domain=%s""",
                           (db.escape_string(out.get('frameworks', "")), result[0]))

否则它仅运行第一批。

有人可以告诉我我的代码有什么问题吗?

最佳答案

我的脑海中浮现出,是否游标中的结果会在下一次执行调用时被覆盖?

您的 SELECT 调用将填充结果。对结果生成器的第一次调用工作正常,因为仍然有来自 SELECT 的结果。然后,您可以使用同一游标执行 UPDATE,这会“重置”游标结果。因此,对生成器的下一次调用将终止循环。如果删除 UPDATE,游标结果不会重置,从而允许循环继续。

这只是一个猜测。我没试过。

关于Python mysqldb fetchmany 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555938/

相关文章:

python - find vs in string python 操作

python - 将 Pandas DataFrame 单元格直接导出到 excel/csv (python)

Python - 删除非字母数字字符但保留空格和西类牙语/葡萄牙语字符

Python MySQLdb - 让游标保持打开状态有好处吗?

Python MySQLdb "error: Microsoft Visual C++ 14.0 is required",即使已安装

python - 尝试按照 PyMC3 上的教程进行操作,它来到 : "' Model' object has no attribute TransformedVar"

python - anaconda 启动器链接不起作用

python - Python中根据多个条件返回列的方法

Python MySQLdb/MySQL INSERT IGNORE 并检查是否被忽略

python - 是什么让尝试: exit early?