size
參數(shù):int
含義:最小的連接數(shù)
max_size
參數(shù):int
含義:最大的連接數(shù)
cursor_factory
參數(shù):psycopg2.extensions.cursor的子類
含義:設(shè)置以后可以寫一個psycopg2.extensions.cursor的子類,添加日志記錄功能或者預(yù)先的數(shù)據(jù)庫結(jié)果處理,格式化execute執(zhí)行失敗后的異常
好處:可以很大程度的提高程序的靈活性,可以重新將事務(wù)封裝在這個子類里面,而不用在每個執(zhí)行SQL語句的地方都要寫事務(wù).
但是這樣做只能保證單條語句或者沒有關(guān)聯(lián)的多條語句的事務(wù)提交和回滾,對于多個插入語句,并且這條語句需要上條語句的返回結(jié)果時,實(shí)現(xiàn)不是很靈活.
例子:
import psycopg2
import psycopg2.extensions
import logging
class LoggingCursor(psycopg2.extensions.cursor):
def execute(self, dict):
logger = logging.getLogger('sql_debug')
logger.info(self.mogrify(sql, args))
try:
psycopg2.extensions.cursor.execute(self, "BEGIN")
for sql in dict.keys():
psycopg2.extensions.cursor.execute(self, sql, dict[sql])
psycopg2.extensions.cursor.execute(self, "COMMIT")
except Exception, exc:
psycopg2.extensions.cursor.execute(self, "ROLLBACK")
logger.error("%s: %s" % (exc.__class__.__name__, exc))
raise
conn = psycopg2.connect(DSN)
cur = conn.cursor(cursor_factory=LoggingCursor)
sql_args={
"INSERT INTO mytable VALUES (%s, %s, %s)":(10, 20, 30),
"INSERT INTO mytable VALUES (%s, %s, %s)":(11,12,13)
}
# 可以自動完成事務(wù)
cur.execute(sql_args)
這樣就能夠在執(zhí)行的時候打印出sql語句和自定義異常
raise_connect_errors
參數(shù):bool
含義:當(dāng)初始化數(shù)據(jù)庫連接失敗后是否拋出連接異常,異常類為 class momoko.PartiallyConnectedError
reconnect_interval
參數(shù): int
含義:當(dāng)數(shù)據(jù)庫連接失敗的時候,設(shè)置每多少毫秒重新嘗試連接.
setsession
參數(shù):list
含義:在一個事務(wù)中同時執(zhí)行一個列表中的所有SQL語句,如果某條SQL語句執(zhí)行失敗了,就關(guān)閉執(zhí)行這寫SQL語句的會話,并且回滾事務(wù).
auto_shrink
參數(shù):bool
含義:當(dāng)指定了數(shù)據(jù)庫連接池的max-size后,會自動回收超過最小連接數(shù)的連接.當(dāng)連接數(shù)達(dá)到最大時才會觸發(fā)該函數(shù)執(zhí)行連接回收.
shrink_period
參數(shù):datetime.timedelta()
含義:設(shè)置多久執(zhí)行一次連接回收,前提是設(shè)置了auto_shrink為true.
shrink_delay
參數(shù):datetime.timedelta()
含義:設(shè)置多久(時,分,秒)沒有用的連接被回收.前提是設(shè)置了auto_shrink為true.但是如果回收了連接后的連接數(shù)小于最小連接,就不會被回收.