with块在退出时是否正确关闭psycopg2连接和光标处理?

问题描述 投票:0回答:1

考虑以下两种方法:

手动关闭

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块可能会破坏对变量的引用,但会保持连接打开。我不认为这是基于我运行的一些测试的情况。但是,如果有更多经验的人有助于确认我的理解,那将会很棒。谢谢!

python postgresql psycopg2
1个回答
1
投票

这在documentation中解释:

当连接退出with块时,如果块没有引发异常,则提交事务。如果发生异常,则回滚事务

[...]

连接可以在多个with语句中使用,每个with块都可以有效地包装在单独的事务中

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

© www.soinside.com 2019 - 2024. All rights reserved.