python使用postgresql-momoko配置

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ù)小于最小連接,就不會被回收.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容