database - 连接断开后如何在数据库连接中维护游标?
问题描述
假设我有一个数据库(例如,在 中Snowflake
)并且我需要对结果执行一些操作(在 中无法完成的操作Snowflake
,例如使用结果作为输入来访问 api)。
所以我在Python
. 但是,连接器在两者之间发生故障。我如何回到读取数据的那一点,然后从那一点恢复?
如果连接没有断开,我将有一个cursor
完全一样的。我的问题是,我如何保留cursor
信息,并在连接断开后使用它?
一种可能的方法是继续将读取的行数写入本地文件,当建立新连接时,绕过已经读取的行数,然后从那里恢复。有替代方法吗?
解决方案
断开连接后无法恢复光标,因为再次连接时需要打开新会话。
您可以使用 和 的组合,limit
但offset
您需要确保将偏移状态存储在本地某处,并确保您对结果具有确定性排序。这样您就可以重新连接、重新运行相同的查询并使用本地偏移量来读取下一个记录块。这将允许您分批而不是为每条记录执行此操作,因为即使您已断开连接,您仍然会在内存中保留一批游标结果,直到您必须进行下一次提取。
在此处查看文档
不需要 ORDER BY 子句;但是,如果没有 ORDER BY 子句,则结果是不确定的,因为结果集中的结果不一定按任何特定顺序排列。要控制返回的结果,请使用 ORDER BY 子句
实际上,您应该使用order by
以确定性方式返回结果的子句(例如对每行的主键/唯一标识符进行排序)
推荐阅读
- docker - PhpStorm 调试器在调试时不会跳转到目标 php 文件中
- typescript - 将类型分配给作为 Maybe 类型的嵌套类型的属性
- sap - Webi 4.2 中的流形 AVG 聚合
- django - 将媒体文件和静态文件从 Amazon S3 提供给 Django/Heroku
- scala - 如何在Scala(火花)中比较两个数据框中的列
- java - Liquibase - 仅在应用程序启动时执行变更集
- amazon-web-services - 为 Spring Boot 应用程序配置 appspec.yml 文件
- python - 将值从一个 DataFrame 映射到另一个
- scikit-learn - sklearn : FitFailedWarning : 估计器拟合失败
- ansible - Ansible - 当条件未按预期工作时