连接断开后如何在数据库连接中维护游标?

问题描述

假设我有一个数据库(例如,在SNowflake中,并且我需要对结果执行一些操作(在SNowflake中无法完成的操作,例如以结果作为输入命中一个api) )。

因此,我在Python中编写了一个连接器。但是,连接器在两者之​​间发生故障。我该如何回到读取数据的那一点,然后从那一点恢复?

如果连接没有断开,我将为此准备一个cursor。我的问题是,如何保存cursor信息,并在断开连接后使用这些信息?

一种可能的方法是继续将读取的行数写入本地文件,并在建立新连接时绕过已读取的行数,然后从那里恢复。有另一种方法吗?

解决方法

断开连接后,光标将无法恢复,因为再次连接时需要打开一个新会话。

您可以结合使用limitoffset,但需要确保将偏移状态存储在本地某个地方,并确保结果具有确定的顺序。这样,您可以重新连接,重新运行相同的查询,并使用本地偏移量读取下一个记录块。这样一来,您就可以分批执行此操作,而不是为每条记录进行批处理,因为即使断开连接,在内存中仍然会有一批游标结果,直到必须进行下一次提取。

查看文档here

不需要ORDER BY子句;但是,如果没有ORDER BY子句,则结果是不确定的,因为结果集中的结果不一定按任何特定顺序排列。要控制返回的结果,请使用ORDER BY子句

实际上,您应该使用order by子句,该子句以确定性的方式返回结果(例如按主键排序/每行的唯一标识符)