Python-如何防止MySQLdb游标更新干扰fetchmany?

Python-如何防止MySQLdb游标更新干扰fetchmany?,python,mysql-python,Python,Mysql Python,我当前的代码只运行前10行 由于我使用的是fetchmany函数,它应该通过选择接下来的10行直到结束来连续运行 但是cursor.execute(““”UPDATE…会干扰fetchmanycursor.execute”(“SELECT…) 有人能告诉我什么是防止它的正确方法吗?不要直接执行更新查询,而是将它们放在字符串中,并在遍历选择查询的结果后立即运行它们。是否尝试使用不同的光标(不要将执行选择的光标与执行更新的光标混合使用)@metatoaster是的,我试过了。但是我得到了mysql错

我当前的代码只运行前10行

由于我使用的是
fetchmany
函数,它应该通过选择接下来的10行直到结束来连续运行

但是
cursor.execute(““”UPDATE…
会干扰fetchmany
cursor.execute”(“SELECT…


有人能告诉我什么是防止它的正确方法吗?

不要直接执行更新查询,而是将它们放在字符串中,并在遍历选择查询的结果后立即运行它们。

是否尝试使用不同的光标(不要将执行选择的光标与执行更新的光标混合使用)@metatoaster是的,我试过了。但是我得到了mysql错误,比如
InnoDB:检查你是否还没有另一个mysqld进程
Hi,我查询了大约1亿行。你认为服务器会以字符串的形式在内存中保存1亿行吗?@Giri你在问题中提到的唯一数字是10。我不能责怪他。你可以轻松地将其包装成一个循环以进行批处理processing@aIKid是的,我忘了提到这一点。我以为你们知道我在使用fetchmany函数时处理的是大行,你们确定你们负担不起将所有域都保存在内存中吗?如果域名是~50字节,它将需要大约5G RAM,这对服务器来说听起来不算太糟糕。
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()