gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:59:41 25 4
gpt4 key购买 nike

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

我的问题是我有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com