Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,12 @@ jobs:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
django-version:
- "2.2"
- "3.0"
- "3.1"
- "3.2"

steps:
- uses: actions/checkout@v1
Expand Down
64 changes: 64 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
![PyPI - Django Version](https://img.shields.io/pypi/djversions/django-postgrespool2)
[![PyPI - License](https://img.shields.io/pypi/l/django-postgrespool2)](https://github.com/lcd1232/django-postgrespool2/blob/master/LICENSE)
[![PyPI](https://img.shields.io/pypi/v/django-postgrespool2)](https://pypi.org/project/django-postgrespool2/)

# Django-PostgresPool2
This is simple PostgreSQL connection pooling for Django. You can use it as an alternative for [PgBouncer](https://www.pgbouncer.org/).
This is a fork of the original [django-postgrespool](https://github.com/kennethreitz/django-postgrespool).

## Installation

Installing Django-PostgresPool2 is simple, with pip:
```bash
$ pip install django-postgrespool2
```

## Usage

Using Django-PostgresPool2 is simple, just set `django_postgrespool2` as your connection engine:
```python
DATABASES = {
"default": {
"ENGINE": "django_postgrespool2",
"NAME": "yourdb",
"USER": "user",
"PASSWORD": "some_password",
"HOST": "localhost",
}
}
```
If you're using the [environ](https://github.com/joke2k/django-environ) module:
```python
import environ

env = environ.Env()

DATABASES = {"default": env.db("DATABASE_URL", engine="django_postgrespool2")}
```
Everything should work as expected.

Configuration
-------------

Optionally, you can provide pool class to construct the pool (default `sqlalchemy.pool.QueuePool`) or additional options to pass to SQLAlchemy's pool creation.
List of possible values `DATABASE_POOL_CLASS` is [here](https://docs.sqlalchemy.org/en/14/core/pooling.html#api-documentation-available-pool-implementations)
```python
DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool'

DATABASE_POOL_ARGS = {
'max_overflow': 10,
'pool_size': 5,
'recycle': 300,
}
```
Here's a basic explanation of two of these options:

- **pool_size** – The *minimum* number of connections to maintain in the pool.
- **max_overflow** – The maximum *overflow* size of the pool. This is not the maximum size of the pool.
- **recycle** - Number of seconds between connection recycling, which means upon checkout, if this timeout is surpassed the connection will be closed and replaced with a newly opened connection.

The total number of "sleeping" connections the pool will allow is `pool_size`. The total simultaneous connections the pool will allow is `pool_size + max_overflow`.

As an example, databases in the [Heroku Postgres](https://www.heroku.com/postgres) starter tier have a maximum connection limit of 20. In that case your `pool_size` and `max_overflow`, when combined, should not exceed 20.

Check out the official [SQLAlchemy Connection Pooling](http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.QueuePool.__init__) docs to learn more about the optoins that can be defined in `DATABASE_POOL_ARGS`.
66 changes: 0 additions & 66 deletions README.rst

This file was deleted.

9 changes: 4 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
from django_postgrespool2 import __version__, __author__
import codecs

required = [
"sqlalchemy>=1.1",
Expand All @@ -12,8 +9,9 @@
setup(
name="django-postgrespool2",
version=__version__,
description="Postgres Connection Pooling for Django.",
long_description=codecs.open("README.rst", "r", "utf-8").read(),
description="PostgreSQL connection pooling for Django.",
long_description=open("README.md", encoding="utf-8").read(),
long_description_content_type="text/markdown",
author=__author__,
author_email="malexey1984@gmail.com",
url="https://github.com/lcd1232/django-postgrespool2",
Expand All @@ -38,4 +36,5 @@
"Framework :: Django :: 3.1",
"Topic :: Database",
),
keywords=["postgresql", "django", "pool", "pgbouncer",]
)
13 changes: 8 additions & 5 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ skipsdist = True
usedevelop = True
minversion = 1.8
envlist =
py{3.5,3.6,3.7,3.8,3.9}-dj2.2
py{3.6,3.7,3.8,3.9}-dj3.0
py{3.6,3.7,3.8,3.9}-dj3.1
py{3.6,3.7,3.8,3.9}-djmaster
py{3.5,3.6,3.7,3.8,3.9,3.10}-dj2.2
py{3.6,3.7,3.8,3.9,3.10}-dj3.0
py{3.6,3.7,3.8,3.9,3.10}-dj3.1
py{3.6,3.7,3.8,3.9,3.10}-dj3.2
py{3.6,3.7,3.8,3.9,3.10}-djmaster

[testenv]
passenv = DJANGO_DB_HOST
Expand All @@ -16,17 +17,19 @@ basepython =
py3.7: python3
py3.8: python3
py3.9: python3
py3.10: python3
pypy: pypy
usedevelop = true
setenv =
PYTHONPATH = {toxinidir}
DJANGO_SETTINGS_MODULE=tests.test_settings
deps =
py{3.5,3.6,3.7,3.8,3.9,pypy}: coverage
py{3.5,3.6,3.7,3.8,3.9,3.10,pypy}: coverage
psycopg2-binary
dj2.2: https://github.com/django/django/archive/stable/2.2.x.tar.gz#egg=django
dj3.0: https://github.com/django/django/archive/stable/3.0.x.tar.gz#egg=django
dj3.1: https://github.com/django/django/archive/stable/3.1.x.tar.gz#egg=django
dj3.2: https://github.com/django/django/archive/stable/3.2.x.tar.gz#egg=django
djmaster: https://github.com/django/django/archive/master.tar.gz#egg=django

commands =
Expand Down