请考虑以下两种方法:
手动关闭
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
块可能会破坏对变量的引用,但会使连接保持打开状态。根据我进行的一些测试,我认为情况并非如此。但是,如果有更多相关经验的人帮助确认我的理解,那就太好了。谢谢!
答案 0 :(得分:1)
这在documentation中有解释:
当连接退出with块时,如果没有异常 由块引发,则事务被提交。的情况下 交易回滚的例外情况
[...]
一个连接可以在多个with语句中使用,每个with 区块有效地包装在单独的交易中
因此,不会破坏任何引用,也不会关闭连接,但是会完成提交。