2014-11-13 15 views
1

我在很多python项目中使用psycopg2,并经常使用HSTORE作为postgres数据类型。在psycopg2中,如何将register_hstore用于连接池?

通常创建我的连接如下:

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

回答

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

0

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