[英]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.