【问题标题】:Python mysqldb fetchmany not working properlyPython mysqldb fetchmany 无法正常工作
【发布时间】:2014-06-26 16:21:32
【问题描述】:

我有一些这样的代码

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]))

否则它只运行第一批。

谁能告诉我我的代码有什么问题?

【问题讨论】:

    标签: python python-2.7 mysql-python


    【解决方案1】:

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

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

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

    【讨论】:

    • 我创建了一个新的光标对象cursor2 并且它工作正常。谢谢
    猜你喜欢
    • 2011-07-01
    • 2023-03-26
    • 2012-04-10
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2017-11-07
    相关资源
    最近更新 更多