目錄
✅ 基本連接池示例
? 關鍵點說明
1. SimpleConnectionPool參數
2. 獲取和釋放連接
3. 線程安全
? 更安全的用法(配合上下文管理器)
⚠️ 注意事項
? 最後:關閉連接池
首頁 後端開發 Python教學 Python Psycopg2連接池示例

Python Psycopg2連接池示例

Jul 28, 2025 am 03:01 AM
python Psycopg2

使用psycopg2.pool.SimpleConnectionPool可有效管理數據庫連接,避免頻繁創建和銷毀連接帶來的性能開銷。 1. 創建連接池時指定最小和最大連接數及數據庫連接參數,確保連接池初始化成功;2. 通過getconn()獲取連接,執行數據庫操作後使用putconn()將連接歸還池中,禁止直接調用conn.close();3. SimpleConnectionPool是線程安全的,適用於多線程環境;4. 推薦結合contextmanager實現上下文管理器,確保連接在異常時也能正確歸還;5. 連接池應作為全局單例使用,並在程序退出前調用closeall()關閉所有連接。該方案適用於中小型應用,大型服務可考慮SQLAlchemy或asyncpg。

python psycopg2 connection pool example

使用psycopg2的連接池可以有效管理數據庫連接,避免頻繁創建和銷毀連接帶來的性能開銷。 psycopg2本身不提供連接池功能,但其官方推薦的psycopg2.pool模塊(實際上是psycopg2包中的pool子模塊)可以基於threading安全地管理連接池。

python psycopg2 connection pool example

下面是一個使用psycopg2.pool.SimpleConnectionPool的實際例子:


✅ 基本連接池示例

import psycopg2
from psycopg2 import pool

# 創建連接池try:
    connection_pool = psycopg2.pool.SimpleConnectionPool(
        1, # 最小連接數10, # 最大連接數host="localhost",
        database="your_db_name",
        user="your_username",
        password="your_password",
        port="5432"
    )

    if connection_pool:
        print("連接池創建成功")

except Exception as e:
    print("連接池創建失敗:", e)

# 從連接池獲取連接conn = connection_pool.getconn()

if conn:
    try:
        cursor = conn.cursor()
        cursor.execute("SELECT version();")
        db_version = cursor.fetchone()
        print("數據庫版本:", db_version)

        # 提交事務(如果是寫操作)
        conn.commit()

    except Exception as e:
        print("數據庫操作出錯:", e)
        conn.rollback()
    finally:
        cursor.close()
        # 把連接歸還給連接池connection_pool.putconn(conn)
else:
    print("無法從連接池獲取連接")

# 程序結束時關閉所有連接# connection_pool.closeall() # 通常在應用退出時調用

? 關鍵點說明

1. SimpleConnectionPool參數

  • minconn : 最小連接數(啟動時創建的連接數)
  • maxconn : 最大連接數(連接池最多可擴展到的連接數)
  • 其餘參數是標準的psycopg2.connect()參數(如host, user, password 等)

2. 獲取和釋放連接

  • 使用getconn()獲取一個連接(會自動創建或複用)
  • 使用putconn(conn)將連接歸還給池(不是關閉!)
  • 不要手動調用conn.close() ,否則會真正關閉連接,導致連接池失效

3. 線程安全

  • SimpleConnectionPool是線程安全的,適合多線程環境
  • 每個線程應獨立獲取和歸還連接

? 更安全的用法(配合上下文管理器)

你可以封裝一個上下文管理器,確保連接自動歸還:

python psycopg2 connection pool example
 from contextlib import contextmanager

@contextmanager
def get_db_connection():
    conn = connection_pool.getconn()
    try:
        yield conn
    finally:
        connection_pool.putconn(conn)

# 使用示例with get_db_connection() as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT current_user;")
    print(cursor.fetchone())
    cursor.close()

這樣即使發生異常,連接也會被正確歸還。


⚠️ 注意事項

  • 連接池對象應是全局或單例的,避免重複創建
  • 應用退出時調用connection_pool.closeall()釋放所有連接
  • 高並發場景下,注意設置合理的maxconn ,避免數據庫連接數超限
  • 如果使用Flask/Django 等框架,建議結合應用生命週期管理連接池

? 最後:關閉連接池

# 程序結束前connection_pool.closeall()
print("所有連接已關閉")

基本上就這些。這個例子適合中小型應用。如果是大型服務,建議考慮使用SQLAlchemy psycopg2的連接池,或異步方案如asyncpg

python psycopg2 connection pool example

以上是Python Psycopg2連接池示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗證或Windows身份驗證;3.查看已安裝驅動:運行pyodbc.drivers()並篩選含'SQLServer'的驅動名,確保使用如'ODBCDriver17forSQLServer'等正確驅動名稱;4.連接字符串關鍵參數

python shutil rmtree示例 python shutil rmtree示例 Aug 01, 2025 am 05:47 AM

shutil.rmtree()是Python中用於遞歸刪除整個目錄樹的函數,能刪除指定文件夾及其所有內容。 1.基本用法:使用shutil.rmtree(path)刪除目錄,需處理FileNotFoundError、PermissionError等異常。 2.實際應用:可一鍵清除包含子目錄和文件的文件夾,如臨時數據或緩存目錄。 3.注意事項:刪除操作不可恢復;路徑不存在時拋出FileNotFoundError;可能因權限或文件佔用導致失敗。 4.可選參數:可通過ignore_errors=True忽略錯

什麼是加密貨幣中的統計套利?統計套利是如何運作的? 什麼是加密貨幣中的統計套利?統計套利是如何運作的? Jul 30, 2025 pm 09:12 PM

統計套利簡介統計套利是一種基於數學模型在金融市場中捕捉價格錯配的交易方式。其核心理念源於均值回歸,即資產價格在短期內可能偏離長期趨勢,但最終會回歸其歷史平均水平。交易者利用統計方法分析資產之間的關聯性,尋找那些通常同步變動的資產組合。當這些資產的價格關係出現異常偏離時,便產生套利機會。在加密貨幣市場,統計套利尤為盛行,主要得益於市場本身的低效率與劇烈波動。與傳統金融市場不同,加密貨幣全天候運行,價格極易受到突發新聞、社交媒體情緒及技術升級的影響。這種持續的價格波動頻繁製造出定價偏差,為套利者提供

如何在Python中執行SQL查詢? 如何在Python中執行SQL查詢? Aug 02, 2025 am 01:56 AM

安裝對應數據庫驅動;2.使用connect()連接數據庫;3.創建cursor對象;4.用execute()或executemany()執行SQL並用參數化查詢防注入;5.用fetchall()等獲取結果;6.修改後需commit();7.最後關閉連接或使用上下文管理器自動處理;完整流程確保安全且高效執行SQL操作。

如何在Python中創建虛擬環境 如何在Python中創建虛擬環境 Aug 05, 2025 pm 01:05 PM

創建Python虛擬環境可使用venv模塊,步驟為:1.進入項目目錄執行python-mvenvenv創建環境;2.Mac/Linux用sourceenv/bin/activate、Windows用env\Scripts\activate激活;3.使用pipinstall安裝包、pipfreeze>requirements.txt導出依賴;4.注意避免將虛擬環境提交到Git,並確認安裝時處於正確環境。虛擬環境能隔離項目依賴防止衝突,尤其適合多項目開發,編輯器如PyCharm或VSCode也

python讀取文件示例 python讀取文件示例 Jul 30, 2025 am 03:34 AM

在Python中逐行讀取文件的推薦方法是使用withopen()和for循環,1.使用withopen('example.txt','r',encoding='utf-8')asfile:可確保文件安全關閉;2.通過forlineinfile:實現逐行讀取,內存友好;3.用line.strip()去除換行符和空白字符;4.指定encoding='utf-8'防止編碼錯誤;其他技巧包括跳過空行、讀前N行、獲取行號及按條件處理行,始終避免手動open而不close。該方法完整且高效,適用於大文件處理

如何在VSCODE中使用參數運行Python腳本 如何在VSCODE中使用參數運行Python腳本 Jul 30, 2025 am 04:11 AM

TorunaPythonscriptwithargumentsinVSCode,configurelaunch.jsonbyopeningtheRunandDebugpanel,creatingoreditingthelaunch.jsonfile,andaddingthedesiredargumentsinthe"args"arraywithintheconfiguration.2.InyourPythonscript,useargparseorsys.argvtoacce

Python線程計時器示例 Python線程計時器示例 Jul 29, 2025 am 03:05 AM

threading.Timer可在指定延遲後異步執行函數,且不阻塞主線程,適合處理輕量級延遲或週期性任務。 ①基本用法:創建Timer對象並調用start()方法,延遲執行指定函數;②取消任務:在任務執行前調用cancel()方法可阻止執行;③重複執行:通過封裝RepeatingTimer類實現週期性運行;④注意事項:每個Timer開啟新線程,應合理管理資源,必要時調用cancel()避免內存浪費,主程序退出時需注意非守護線程的影響,適用於延遲操作、超時處理和簡單輪詢等場景,使用簡單但非常實用。

See all articles