Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python with块是否在退出时正确关闭psycopg2连接和光标句柄?_Python_Postgresql_Psycopg2 - Fatal编程技术网

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块退出时,光标将关闭?以后我会核对一下。