我在许多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
?
答案 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