with块是否可以退出psycopg2连接并且在退出时光标能够正确处理?

时间:2019-04-15 07:39:53

标签: 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.execute(qry)
        conn.commit()

我的问题是,这两种方法彼此等效吗?我担心with块可能会破坏对变量的引用,但会使连接保持打开状态。根据我进行的一些测试,我认为情况并非如此。但是,如果有更多相关经验的人帮助确认我的理解,那就太好了。谢谢!

1 个答案:

答案 0 :(得分:1)

这在documentation中有解释:

  

当连接退出with块时,如果没有异常   由块引发,则事务被提交。的情况下   交易回滚的例外情况

     

[...]

     

一个连接可以在多个with语句中使用,每个with   区块有效地包装在单独的交易中

因此,不会破坏任何引用,也不会关闭连接,但是会完成提交。