我在python中使用cx_Oracle模块。我们需要明确关闭打开的游标吗?当我们在获取数据并仅关闭连接对象(con.close())而没有发出cursor.close()之后错过关闭游标会发生什么?
在这种情况下是否有任何内存泄漏的可能性?
答案 0 :(得分:1)
根据the documentation of cx_Oracle,游标应该被自动垃圾回收,并且应该没有泄漏风险。
但是,根据我的轶事经验,如果我没有明确关闭光标,进程的内存使用量会无限增长——这可能与我使用自定义 rowfactory
有关系,我必须在 lambda 中捕获光标(尽管理论上,GC 也应该能够处理这种情况)。
由于 Cursor 类实现了上下文管理器模式,您可以安全方便地编写:
with connection.cursor() as cursor:
cursor.execute("...")
答案 1 :(得分:0)
如果使用多个光标。 cursor.close()将帮助您释放不再需要的资源。 如果您只使用一个游标与一个连接。我认为connection.close()很好。