我正在学习如何使用带有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++编写的。