From: Jay L. <js...@js...> - 2001-03-23 14:10:17
|
OK, a couple of problems here. First of all, you don't need to edit DBPool.py. Just create an instance of it. Now, you're creating the instance improperly. When you create an instyance of DBPool, you pass it the DB Module, the n umber of connections to create, and the DB Module connection partameters. Here's how your test script should look: --------------------------------------- import DCOracle from DBPool import DBPool def main(): pool = DBPool(DCOracle, 15, 'has093:8080', 'scott', 'tiger', hssblr') for i in range(15): db = pool.getConnection() (and the rest of your test) if __name__ == '__main__': main() ______________________________________________________-- Let us know if that helps. Jay Tom Schwaller wrote: > some Oracle addicts around here? > > > ------------------------------------------------------------------------ > > Subject: > > Please help me > From: > > bpr...@hs... > Date: > > Fri, 23 Mar 2001 17:28:25 +0530 > To: > > Tom Schwaller <tom...@li...> > > > > Dear > > > > I am trying to write a database connection pool in python. Database is > Oracle8. I went to thru one sample code mentioned below. Here iam facing > some problem. > 1. Here iam importing from DCOracle2 instead of MySQL. But it is giving > some error like > > > --------------------------------------------------------------------------- > ------------------------------------- > Traceback (innermost last): > File "dbpooltest1.py", line 76, in ? > pool = DBPool('hss093:8080','scott','tiger','hssblr') > File "dbpooltest1.py", line 40, in __init__ > self.addConnection = self._threadsafe_addConnection > AttributeError: _threadsafe_addConnection > > --------------------------------------------------------------------------- > ---------------------------------------------------- > > What i am trying to do is a simple database connection that should run from > python. Please do the needfull > > > > > > import DCOracle2 > > class UnsupportedError: > pass > > class PooledConnection: > def __init__(self, pool, db): > self.db = db > self.pool = pool > > def close(self): > if self.db != None: > self.pool.returnConnection(self.db) > self.db = None > > def __getattr__(self, name): > return getattr(self.db, name) > > def __del__(self): > self.close() > > class DBPool: > def __init__(self, dbModule, num, *args, **kwargs): > if DCOracle2.threadsafety == 0: > raise UnsupportedError, "Database module does not support any > level of threading." > elif DCOracle2.threadsafety == 1: > from Queue import Queue > self.queue = Queue(num) > self.addConnection.Connect = self._unthreadsafe_addConnection > self.getConnection = self._unthreadsafe_getConnection > self.returnConnection = self._unthreadsafe_addConnection > elif DCOracle2.threadsafety >= 2: > self.nextCon = 0 > self.connections = [] > self.addConnection = self._threadsafe_addConnection > self.getConnection = self._threadsafe_getConnection > self.returnConnection = self._threadsafe_returnConnection > if not args: > args = () > if not kwargs: > kwargs = {} > for i in range(num): > con = apply(DCOracle2.connect, args, kwargs) > self.addConnection(con) > > # threadsafe/unthreadsafe refers to the database _module_, not THIS > class.. > # this class is definitely threadsafe (um. that is, I hope so - Dan) > def _threadsafe_addConnection(self, con): > self.connections.append(con) > > def _threadsafe_getConnection(self): > con = PooledConnection(self, self.connections[self.nextCon]) > self.nextCon = self.nextCon + 1 > if self.nextCon >= len(self.connections): > self.nextCon = 0 > return con > > def _threadsafe_returnConnection(self, con): > return > > # we`d MUCH rather use the other versions, but oh well.. > def _unthreadsafe_addConnection(self, con): > self.queue.put(con) > > def _unthreadsafe_getConnection(self): > return PooledConnection(self, self.queue.get()) > > if __name__ == '__main__': > > #pool = DBPool(host='localhost', user='td', passwd='td', db='orcl') > pool = DBPool('hss093:8080','scott','tiger','hssblr') > for i in range(15): > db = pool.getConnection() > cursor = db.cursor() > cursor.execute('select * from test ') > print cursor.fetchall() > db.close() > > > > thanks in advance > > > regards, > Prashanth > > > attachment.txt > > Content-Type: > > text/plain > > > ------------------------------------------------------------------------ > Please help me.eml > > Content-Type: > > message/rfc822 > Content-Encoding: > > 7bit > > |