如果不关闭pyodbc连接会发生什么?

12

想知道如果在pyodbc中连接没有正确关闭会发生什么。

另外,在关闭连接之前是否需要关闭光标?

在我的特定用例中,我在自定义DB类的.__del__()方法中包含了一次关闭连接的调用,但没有显式调用关闭。

最佳实践是什么?

1个回答

11

当连接被删除时(以及它们相关的游标),它们会自动关闭,因此可以自我清理。但是,如果您在多个位置连接,您需要显式关闭连接。而且,为了更符合Pythonic风格,显式关闭连接始终更好。

还要注意:在不提交更改的情况下关闭连接将导致自动隐式回滚。

有关更多信息和参考,请访问:

https://github.com/mkleehammer/pyodbc/wiki/Connection#close


哎呀,你说得对极了,我的手指搞错了。这就是我早上第一时间回答问题的结果。不能忘记PEP-20!https://www.python.org/dev/peps/pep-0020/ 现在正在修复。 - FlipperPA
1
在其他问题中,我看到有人建议使用with块来自动关闭和清理诸如文件句柄之类的东西。那对于数据库连接来说,这被认为是良好的(最佳的?)实践吗? - Gord Thompson
5
回应我自己的评论,值得注意的是,在使用 pyodbc 的 connection 对象在 with ... 块("上下文管理器")中时,并不会自动在该块结束时关闭连接。我刚在测试涉及 SQL Server 连接的一些代码时发现了这一点。关于 pyodbc 和上下文管理的更多讨论,请参见 GutHub 上 此问题 - Gord Thompson
1
@JingHe 我发现管理连接的最佳方式是使用with语句,它会在你退出块后自动关闭连接。 with connection.cursor() as cursor: 这样你就不必担心了。 - FlipperPA
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接