【问题标题】:What happens if you don't close a pyodbc connection?如果不关闭 pyodbc 连接会发生什么?
【发布时间】:2015-06-18 03:20:57
【问题描述】:

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

另外,连接前需要关闭光标吗?

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

最佳做法是什么?

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    连接(及其关联的游标)在被删除时会自动关闭,因此它会自行清理。但是,如果您在多个地方进行连接,则需要明确关闭。此外,为了更加 Pythonic,总是最好是明确的。

    另请注意:关闭连接而不提交更改将导致自动隐式回滚。

    更多,参考:

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

    【讨论】:

    • GAH,你完全正确,我的手指被交叉了。这是我早上回答问题的第一件事。不能忘记 PEP-20! python.org/dev/peps/pep-0020 正在修复。
    • 在我看到的其他问题中,建议使用with 块来自动关闭和清理文件句柄等内容。对于数据库连接,这是否也被认为是好的(“最佳”?)做法?
    • 回应我自己的评论,值得注意的是,在 with ... 块(“上下文管理器”)中使用 pyodbc connection 对象不会不会自动关闭该块末尾的连接。我刚刚在测试一些涉及 SQL Server 连接的代码时发现了这一点。有关 pyodbc 和上下文管理的更多讨论,请参阅 GutHub 上的 this issue
    • per github.com/mkleehammer/pyodbc/issues/48, "当函数退出时,无论是通过完成还是通过异常,游标都将被删除。由于游标是对连接的唯一引用,它也会被删除 -立即”
    • @JingHe 我发现管理连接的最佳方法是使用with 语句,一旦您出块,它将自动关闭连接。 with connection.cursor() as cursor:那你就不用担心了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多