首页 > 解决方案 > 连接断开后如何在数据库连接中维护游标?

问题描述

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

所以我在Python. 但是,连接器在两者之​​间发生故障。我如何回到读取数据的那一点,然后从那一点恢复?

如果连接没有断开,我将有一个cursor完全一样的。我的问题是,我如何保留cursor信息,并在连接断开后使用它?

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

标签: databasesnowflake-cloud-data-platformconnector

解决方案


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

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

在此处查看文档

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

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


推荐阅读