DBUtils 是一套允許線程化 Python 程式可以安全和有效訪問資料庫的模組。有人在基於Pylons的伺服器上測試了使用DBUtils前後的效能對比,看上去似乎效能不錯。不失為一個管理資料庫串連的辦法。
但連mysql沒問題,代碼很簡單,
from DBUtils.PooledDB import PooledDB
import MySQLdb
pool = PooledDB(MySQLdb, 5,host = "ipip", user = "root", passwd = "....", db = "dbTest")
"""
PooledDB的第一個參數是creator: either an arbitrary function returning new DB-API 2
connection objects or a DB-API 2 compliant database module
也就是說,我們傳入一個資料庫實作類別的module名字即可,它自己會去判斷如何建立資料庫連接。
"""
db_conn = pool.connection() # 這就是從串連池中擷取一個串連的語句
但是針對sqlserver,似乎互連網上沒有人提及如何連,而且上面mysql的這種簡潔寫法也不再適用。一個原因在於python中的_mssql庫並不是DB-SIG compliant module,只有與之一同打包的pymssql庫(其實pymssql就是在_mssql的基礎上按照規範封裝了一層罷了)才是。折騰了許久,在google code裡也搜尋了不少DBUtil python代碼,終於摸索出這麼一條路子:
import _mssql # 串連Ms sql server 2000的庫
import pymssql # DB-SIG compliant module for communicating with MS SQL servers
from DBUtils.PooledDB import PooledDB
args = (0,0,0,config.pool_max_connections,0,0,None )
conn_kwargs = {'host':databaseHost+','+databasePort, 'user':databaseUserName, 'password':databaseUserPwd, 'database': databaseName}
config.databaseConnPool = PooledDB(pymssql, *args, **conn_kwargs)
# 傳入參數時,位置參數要在最前面,關鍵字參數其次,變長參數再次,關鍵字變長參數最後
# args 是 關鍵字參數
# conn_kwargs 變長參數
鄭昀 20071227