我正在学习如何将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”已不存在,如何关闭它?
答案 0 :(得分:1)
根据官方文档:http://initd.org/psycopg/docs/connection.html#connection.close
现在关闭连接(而不是在执行del时)。...
删除connection
对象时,它将关闭。尽管我找不到相关的源代码,因为它们都是用C ++编写的。