DBPool¶
DBPool.py
Implements a pool of cached connections to a database for any DB-API 2 compliant database module. This should result in a speedup for persistent applications like Webware. The pool of connections is threadsafe regardless of whether the used DB-API 2 general has a threadsafety of 1 or 2.
For more information on the DB-API 2 specification, see PEP 249.
The idea behind DBPool is that it’s completely seamless, so once you have established your connection, use it just as you would any other DB-API 2 compliant module. For example:
import pgdb # import used DB-API 2 module
from MiscUtils.DBPool import DBPool
dbpool = DBPool(pgdb, 5, host=..., database=..., user=..., ...)
db = dbpool.connection()
Now use “db” exactly as if it were a pgdb connection. It’s really just a proxy class.
db.close() will return the connection to the pool, not actually close it. This is so your existing code works nicely.
DBPool is actually intended to be a demonstration of concept not to be used in a productive environment. It is really a very simple solution with several drawbacks. For instance, pooled database connections which have become invalid are not automatically recovered. For a more sophisticated solution, please have a look at the DBUtils package.
CREDIT
Contributed by Dan Green.
Thread safety bug found by Tom Schwaller.
Fixes by Geoff Talvola (thread safety in _threadsafe_get_connection()).
Clean up by Chuck Esterbrook.
Fix unthreadsafe functions which were leaking, Jay Love.
Eli Green’s webware-discuss comments were lifted for additional docs.
Coding and comment clean-up by Christoph Zwerschke.
- class MiscUtils.DBPool.DBPool(dbapi, maxconnections, *args, **kwargs)¶
Bases:
object
- __init__(dbapi, maxconnections, *args, **kwargs)¶
Set up the database connection pool.
- dbapi:
the DB-API 2 compliant module you want to use
- maxconnections:
the number of connections cached in the pool
- args, kwargs:
the parameters that shall be used to establish the database connections using
dbapi.connect()
- exception MiscUtils.DBPool.DBPoolError¶
Bases:
Exception
General database pooling error.
- __init__(*args, **kwargs)¶
- add_note()¶
Exception.add_note(note) – add a note to the exception
- args¶
- with_traceback()¶
Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.
- exception MiscUtils.DBPool.NotSupportedError¶
Bases:
DBPoolError
Missing support from database module error.
- __init__(*args, **kwargs)¶
- add_note()¶
Exception.add_note(note) – add a note to the exception
- args¶
- with_traceback()¶
Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.