如果使用上下文管理(as),是否应该手动关闭数据库连接?

时间:2018-10-31 04:51:48

标签: python postgresql psycopg2

我正在学习如何将PostgreSQL数据库与Python(3.6)的psycopg2模块一起使用。我在确切确定在哪种情况下应该手动关闭连接时遇到了麻烦。 根据{{​​3}}:

  

与文件对象或其他资源不同,通过退出连接   阻止不会关闭连接,而只会关闭关联的交易   使用它:连接可以用在与with语句和   每个with块都有效地包装在单独的交易中

但是随后出现了一个示例代码片段:

conn = psycopg2.connect(DSN)

with conn:
    with conn.cursor() as curs:
        curs.execute(SQL1)

with conn:
    with conn.cursor() as curs:
        curs.execute(SQL2)

conn.close()

但是,我习惯于使用with-as(即类似

)来进行上下文管理
with psycopg2.connect(DSN) as conn:
    with conn.cursor() as curs:
        curs.execute(SQL)

这是一种合理的方法,还是运行上述命令之后是否还会有打开的连接?如果是这样,由于“ conn”已不存在,如何关闭它?

1 个答案:

答案 0 :(得分:1)

根据官方文档:http://initd.org/psycopg/docs/connection.html#connection.close

  

现在关闭连接(而不是在执行del时)。...

删除connection对象时,它将关闭。尽管我找不到相关的源代码,因为它们都是用C ++编写的。