在psycopg2中,如何将register_hstore与连接池一起使用?

时间:2014-11-13 18:36:12

标签: python postgresql psycopg2

我在许多python项目中使用psycopg2,经常使用HSTORE作为postgres数据类型。

通常我按如下方式创建我的连接:

connection =psycopg2.connect(...) 
psycopg2.extras.register_hstore(connection)

然后允许Python dicts和Postgres hstores之间的无缝集成。

但是,如果我想使用连接池,显然我必须写:

pool = psycopg2.pool.SimpleConnectionPool(...)

然后将其与

一起使用
connectionFromPool = pool.getconn()

但是如果每次我要求它运行register_hstore(connectionFromPool),那么该函数将在同一个连接上多次调用。这会引起副作用吗?是不是连接池的整个点,以避免不必要的呼叫?

在最初创建连接时,是否有某种方式告诉SimpleConnectionPool使用register_hstore

2 个答案:

答案 0 :(得分:1)

您可以使用psycopg2.extras.register_hstore(connection, globally=True)

答案 1 :(得分:0)

最后我编写了一个子类来覆盖_connect方法:

class MyConnectionPool(BasePoolClass):
    getconn = BasePoolClass._getconn
    putconn = BasePoolClass._putconn
    closeall   = BasePoolClass._closeall

    def _connect(self, key=None):
        conn= BasePoolClass._connect(self, key)
        psycopg2.extras.register_hstore(conn,unicode=True)
        psycopg2.extensions.register_type(psycopg2.extensions.UNICODE,conn)
        return conn

然后可以使用哪个代替SimpleConnectionPool