python使用postgresql-momoko配置

2016-04-03  本文已影响570人  进击的诺基亚

size

参数:int
含义:最小的连接数

max_size

参数:int
含义:最大的连接数

cursor_factory

参数:psycopg2.extensions.cursor的子类
含义:设置以后可以写一个psycopg2.extensions.cursor的子类,添加日志记录功能或者预先的数据库结果处理,格式化execute执行失败后的异常
好处:可以很大程度的提高程序的灵活性,可以重新将事务封装在这个子类里面,而不用在每个执行SQL语句的地方都要写事务.
但是这样做只能保证单条语句或者没有关联的多条语句的事务提交和回滚,对于多个插入语句,并且这条语句需要上条语句的返回结果时,实现不是很灵活.

例子:

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)
}
# 可以自动完成事务
cur.execute(sql_args)

这样就能够在执行的时候打印出sql语句和自定义异常

raise_connect_errors

参数:bool
含义:当初始化数据库连接失败后是否抛出连接异常,异常类为 class momoko.PartiallyConnectedError

reconnect_interval

参数: int
含义:当数据库连接失败的时候,设置每多少毫秒重新尝试连接.

setsession

参数:list
含义:在一个事务中同时执行一个列表中的所有SQL语句,如果某条SQL语句执行失败了,就关闭执行这写SQL语句的会话,并且回滚事务.

auto_shrink

参数:bool
含义:当指定了数据库连接池的max-size后,会自动回收超过最小连接数的连接.当连接数达到最大时才会触发该函数执行连接回收.

shrink_period

参数:datetime.timedelta()
含义:设置多久执行一次连接回收,前提是设置了auto_shrink为true.

shrink_delay

参数:datetime.timedelta()
含义:设置多久(时,分,秒)没有用的连接被回收.前提是设置了auto_shrink为true.但是如果回收了连接后的连接数小于最小连接,就不会被回收.

上一篇下一篇

猜你喜欢

热点阅读