考虑以下两种方法:
手动关闭
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
块可能会破坏对变量的引用,但会保持连接打开。我不认为这是基于我运行的一些测试的情况。但是,如果有更多经验的人有助于确认我的理解,那将会很棒。谢谢!
这在documentation中解释:
当连接退出with块时,如果块没有引发异常,则提交事务。如果发生异常,则回滚事务
[...]
连接可以在多个with语句中使用,每个with块都可以有效地包装在单独的事务中
因此,不会销毁任何引用,也不会关闭任何连接,但会完成提交。