Python(Mysql 连接器)-如何刷新光标上的结果

标签 python mysql cursor refresh connector

在提问之前我应该​​告诉你我是一个菜鸟。

我的问题是我有2个游标(在不同的sql连接上),第一个游标从sql数据库获取结果,而第二个游标对结果中的行进行更改。问题是我想在第二个游标发生更改后刷新第一个游标结果的内容。

我的游标在缓冲的 SQL 连接上工作。

我被卡住的部分代码(我删除了一些不必要的行):

// more loops here before the sample -

    cursor2.execute(query2)
    for result in cursor2 : 

        if (str(result[3]) == "None") :
            name = result[1]
            query3 = ("UPDATE accounts SET entry1 = %s WHERE name = %s")
            cursor3.execute(query3,(entry,name))
            sql3.commit()
            break

        elif (str(result[4]) == "None") :
            name = result[1]
            query3 = ("UPDATE accounts SET entry2 = %s WHERE name = %s")
            cursor3.execute(query3,(entry,name))
            sql3.commit()
            break

这个示例似乎没有帮助,但是; 结果[3]给了我列“entry1”,结果[4]=“entry2”。

光标3根据情况改变entry1或entry2的内容。但是在cursor3提交之后,当循环返回到“if (str(result[3]) == "None") :”部分时,它仍然将result[3]视为None。当我检查 MysqlDatabase 时,“entry1”似乎已成功更新。我想我需要以某种方式刷新光标2中的结果,但我不知道如何。

我尝试将缓冲设置为 false,但出现了无法消除的“未读结果”错误。 (就像我说的,我是菜鸟)。有什么建议吗?

最佳答案

您在正常光标下遇到未读结果发现错误,因为您尚未阅读全部内容 来自cursor2 的行和您在同一连接上通过cursor3 发送查询。 使用 buffered=True 时,游标会在执行中获取所有行并将它们保存在内存中,但由于数据位于内存中并且不是在每次迭代中从服务器获取,因此它包含陈旧数据。

因此,要在每次迭代中更新数据,您需要每次运行 cursor2.execute ,还需要使用 cursor.fetchall() 返回一个元组的元组,每个元组都是一行。

cursor2.execute(query2)
rows = cursor2.fetchall()

while i < len(rows): 
    result = rows[i]
    i += 1
    if (str(result[3]) == "None") :
        name = result[1]
        query3 = ("UPDATE accounts SET entry1 = %s WHERE name = %s")
        cursor3.execute(query3,(entry,name))
        sql3.commit()
        cursor2.execute(query2)
        rows = cursor2.fetchall()
        i=0

    elif (str(result[4]) == "None") :
        name = result[1]
        query3 = ("UPDATE accounts SET entry2 = %s WHERE name = %s")
        cursor3.execute(query3,(entry,name))
        sql3.commit()
        cursor2.execute(query2)
        rows = cursor2.fetchall()
        i=0

但这根本不是一个好的解决方案,因为对于包含条目 1 或条目 2 为 None 的每一行,您将执行一次并获取所有数据 好的方法是调用一次cursor.execute(),然后使用rows =cursor.fetchall()并根据获取的数据更新表中的所有行第一次。

关于Python(Mysql 连接器)-如何刷新光标上的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125055/

相关文章:

Python Beautiful soup 在html中插入注释

php - mysql中的多维表

mysql - 如何解决存储引擎的错误122?

MySQL基于单一条件删除

java - 当一个对象的实例变量在eclipse中以 Debug模式高亮时

java - SimpleCursorAdapter 删除值

shell - 在终端/shell 中读取光标位置的内容

python - 从 Django 中的死数据库连接中恢复

Python正则表达式,重复数据

python - 'easy_install -U cython' 提示 vcvarsall.bat 和 -mno-cygwin 失败