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



我正在学习如何使用带有Python(3.6(的psycopg2模块的PostgreSQL数据库。我很难弄清楚在什么情况下应该手动关闭我的连接。根据文件:

与文件对象或其他资源不同,使用退出连接块不会关闭连接,而只关闭关联的事务with it:一个连接可以在多个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()

然而,我习惯于使用as进行上下文管理,即类似的东西

with psycopg2.connect(DSN) as conn:
with conn.cursor() as curs:
curs.execute(SQL)

这是一个合理的方法吗?还是在运行以上内容后仍然会有一个开放的连接?如果是,既然"conn"已不存在,我该如何关闭它?

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

立即关闭连接(而不是执行del时(。。。。

删除connection对象时,它将被关闭。虽然我没有找到相关的源代码,因为它们都是用C++编写的。

最新更新