问题描述
假设我有一个数据库(例如,在SNowflake
中,并且我需要对结果执行一些操作(在SNowflake
中无法完成的操作,例如以结果作为输入命中一个api) )。
因此,我在Python
中编写了一个连接器。但是,连接器在两者之间发生故障。我该如何回到读取数据的那一点,然后从那一点恢复?
如果连接没有断开,我将为此准备一个cursor
。我的问题是,如何保存cursor
信息,并在断开连接后使用这些信息?
一种可能的方法是继续将读取的行数写入本地文件,并在建立新连接时绕过已读取的行数,然后从那里恢复。有另一种方法吗?
解决方法
断开连接后,光标将无法恢复,因为再次连接时需要打开一个新会话。
您可以结合使用limit
和offset
,但需要确保将偏移状态存储在本地某个地方,并确保结果具有确定的顺序。这样,您可以重新连接,重新运行相同的查询,并使用本地偏移量读取下一个记录块。这样一来,您就可以分批执行此操作,而不是为每条记录进行批处理,因为即使断开连接,在内存中仍然会有一批游标结果,直到必须进行下一次提取。
查看文档here
不需要ORDER BY子句;但是,如果没有ORDER BY子句,则结果是不确定的,因为结果集中的结果不一定按任何特定顺序排列。要控制返回的结果,请使用ORDER BY子句
实际上,您应该使用order by
子句,该子句以确定性的方式返回结果(例如按主键排序/每行的唯一标识符)