DBCP Lite
A simple, light and nearly featureless database connection pool for Python.
Connections are added to the pool as needed up to max_size
in number.
Once added the connections will remain in the pool and no attempt is made
to shrink the pool. In most cases it is recommended to set
min_size == max_size
.
Usage
import cx_Oracle
from dbcp_lite import DBConnectionPool
connect_args = ('scott', 'tiger', 'dbhost.example.com/orcl')
pool = DBConnectionPool(cx_Oracle.connect,
create_args=connect_args,
create_kwargs={'threaded': False},
min_size=1,
max_size=4,
name='scott@orcl')
with pool.acquire() as connection:
...
with pool.acquire_cursor() as cursor:
...
pool.close()
The acquire_cursor()
is a convenience method that returns a Cursor
using a
Connection
from the pool. Upon successful completion commit()
will be
called on the Connection
and the Cursor
will be closed.
Timeouts
A timeout can be provided to various methods. If no connections are available to
be acquired
or closed
the methods will raise a PoolTimeout
exception.
Lifecycle Methods
The following lifecycle methods are called during normal operations and alternate implementations can be provided if needed to perform specialized setup or cleanup.
on_acquire(self, connection)
- no-op
on_return(self, connection)
- default implementation calls connection.rollback()
on_close(self, connection)
- default implementation calls connection.close()
For example, to implement auto-commit:
pool = ...
pool.on_return = lambda x: x.commit()