簡體   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