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