Python with块是否在退出时正确关闭psycopg2连接和光标句柄?
考虑以下两种方法: 手动关闭Python with块是否在退出时正确关闭psycopg2连接和光标句柄?,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,考虑以下两种方法: 手动关闭 import psycopg2 conn = psycopg2.connect('dbname=foo') csor = conn.cursor() csor.execute(qry) conn.commit() csor.close() conn.close() 带块 with psycopg2.connect('dbname=foo') as conn: with conn.cursor() as csor: csor.execu
import psycopg2
conn = psycopg2.connect('dbname=foo')
csor = conn.cursor()
csor.execute(qry)
conn.commit()
csor.close()
conn.close()
带块
with psycopg2.connect('dbname=foo') as conn:
with conn.cursor() as csor:
csor.execute(qry)
conn.commit()
我的问题是,这两种方法是否等效?我担心with
块可能会破坏对变量的引用,但使连接保持打开状态。不过,根据我运行的一些测试,我认为情况并非如此。然而,如果有人有更多的经验,这些帮助确认我的理解,这将是伟大的。谢谢 这在以下章节中进行了解释:
当连接退出with块时,如果未发生异常
由块引发,事务被提交。万一
事务回滚时出现异常
[……]
一个连接可以在多个with语句中使用,每个with语句都可以使用
块有效地包装在单独的事务中
因此,不会破坏任何引用,也不会关闭任何连接,但已完成提交。嘿,感谢您的快速回答!当我之前四处查看时,我肯定没有在文档中看到该部分。请您在回答中补充一下,当内部with块退出时,光标将关闭?以后我会核对一下。