繁体   English   中英

psycopg2池SimpleConnectionPool是否需要提交?

[英]psycopg2 pool SimpleConnectionPool needs commit?

我实现了以下代码以创建池连接:

def create_global_connection(minconn, maxconn, _pgconnstr):
    global g_connection
    g_connection = psycopg2.pool.SimpleConnectionPool(minconn, maxconn, _pgconnstr)
    # global_connection.autocommit = True

@contextmanager
def getcursor():
    global g_connection
    conn = g_connection.getconn()
    try:
        yield conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    finally:
        g_connection.putconn(conn)

我做这样的选择:

with getcursor() as cur:
    cur.execute("SELECT * FROM %s;" % (table))

我的问题是,连接和执行是否需要提交(在create_global_connection中注释掉的行)?

这是有关事务的psycopg2文档的链接:

http://initd.org/psycopg/docs/usage.html#transactions-control

从文档引用:

当连接退出with块时,如果该块未引发任何异常,则提交事务。 在例外情况下,事务将回滚。

当游标退出with块时,它将关闭,从而释放最终与之关联的所有资源。 交易状态不受影响。

请注意,与文件对象或其他资源不同,退出连接的with块不会关闭连接,而只会关闭与之关联的事务:连接可以用在with语句之外,并且每个with块都可以有效地包装在单独的语句中交易

按照编写的方式,您的代码将执行选择,但是除非您在with块内使用光标,否则光标将关闭。 with构造仅可用于2.5或更高版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM