Skip to main content

Basic database persistance / connection pooling for Django + Postgres.

Project description

Django DB Pool
=============

Another connection pool "solution"?
-----------------------------------

Yes, alas. Django punts on the problem of pooled / persistant connections ([1][1]), generally telling folks to use a dedicated application like PGBouncer (for Postgres.) However that's not always workable on app-centric platforms like Heroku, where each application runs in isolation. Thus this package. There are others ([2][2]), but this one attempts to provide connection persistance / pooling with as few dependencies as possible.

Currently only the Django postgres_psycopg2 driver is supported. Connection pooling is implemented by thinly wrapping a psycopg2 connection object with a pool-aware class. The actual pool implementation is psycop2g's built-in [ThreadedConnectionPool](http://initd.org/psycopg/docs/pool.html), which handles thread safety for the pool instance, as well as simple dead connection testing when connections are returned.

Because this implementation sits inside the python interpreter, in a multi-process app server environment the pool will never be larger than one connection. However, you can still benefit from connection persistance (no connection creation overhead, query plan caching, etc.) so the (minimal) additional overhead of the pool should be outweighed by these benefits. TODO: back this up with some data!


Requirements
------------

* [Django 1.3 or 1.4](https://www.djangoproject.com/download/) with [Postgres](http://www.postgresql.org/)


Installation
------------

pip install django-db-pool


Usage
-----

Change your `DATABASES` -> `ENGINE` from `'django.db.backends.postgresql_psycopg2'` to
`'dbpool.db.backends.postgresql_psycopg2'`.

If you are in a multithreaded environment, also set `MAX_CONNS` and optionally `MIN_CONNS` in the `OPTIONS`,
like this:

'default': {
'ENGINE': 'dbpool.db.backends.postgresql_psycopg2',
'OPTIONS': {'MAX_CONNS': 1},
# These options will be used to generate the connection pool instance
# on first use and should remain unchanged from your previous entries
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test123',
'HOST': 'localhost',
'PORT': '',
}

See the [code][base] for more information on settings `MAX_CONNS` and `MIN_CONNS`.

Lastly, if you use [South](http://south.aeracode.org/) (and you should!) you'll want to make sure it knows that you're still using Postgres:

SOUTH_DATABASE_ADAPTERS = {
'default': 'south.db.postgresql_psycopg2',
}

[1]: https://groups.google.com/d/topic/django-users/m1jeE4Cxr9A/discussion
[2]: https://github.com/jinzo/django-dbpool-backend
[base]: https://github.com/gmcguire/django-db-pool/blob/master/dbpool/db/backends/postgresql_psycopg2/base.py#L48-61

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-db-pool-0.0.8.tar.gz (6.5 kB view details)

Uploaded Source

File details

Details for the file django-db-pool-0.0.8.tar.gz.

File metadata

File hashes

Hashes for django-db-pool-0.0.8.tar.gz
Algorithm Hash digest
SHA256 c3701000895393463238179c619bb0ba96e220c00e55d79b3575d50b2eb0a0f5
MD5 8d0b13bebb2cbafee588cc19718021bc
BLAKE2b-256 23991623bf55469419f09d466fa34dc22d1dbc95b88db890fbc3b23c679b4cb4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page