An implementation of the psycopg2 module using cffi. The module is currently compatible with Psycopg 2.5.
You can install psycopg2cffi from pypi:
pip install psycopg2cffi
Or from source:
python setup.py develop
Installation requirements are the same as for psycopg2 - you must have libpq headers, pg_config somewhere on your $PATH. Installation was tested on Ubuntu 12.04 and CentOS (RHEL 5.0). It should be possible to make it work on Windows, but I did not even test it.
This module works under CPython 2.6+, CPython 3.2+, PyPy 2 and PyPy 3 (PyPy version should be at least 2.0, which is ancient history now).
To use this package with Django or SQLAlchemy invoke a compatability hook (for example, from settings.py in case of django, or from a psycopg2.py file in site-packages of your virtual env):
from psycopg2cffi import compat compat.register()
This will map psycopg2cffi to psycopg2.
Submit issues to https://github.com/chtd/psycopg2cffi/issues
If you notice that psycopg2cffi under PyPy is noticably slower than psycopg2 under CPython, submit this to the issues too - it should not be the case.
This is a port of (Michael van Tellingen port https://github.com/mvantellingen/psycopg2-ctypes of Alex Gaynor's rpython port (https://bitbucket.org/alex_gaynor/pypy-postgresql/overview) of psycopg2 to python + ctypes) to cffi.
The main motivation for a port was speed - the writeup with benchmarks is here: http://chtd.ru/blog/bystraya-rabota-s-postgres-pod-pypy/?lang=en
To run tests, install pytest and run them with:
You can also run Django tests. You need to checkout django source, add psycopg2 compat as described above, and, from the root of the django checkout:
PYTHONPATH=`pwd` ./tests/runtests.py \ --settings=psycopg2cffi.tests.psycopg2_tests.testconfig
In case of problems with django tests, see official django docs https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests
2.6.1 (08 Feb 2015)
Fixing things that were broken in 2.6.0:
- Fix issue #31 - bigint on 32-bit
- Fix issue #32 - register_type and unicode
2.6.0 (24 Jan 2015)
- Python 3 support
- A bit faster reading of int, long, float, double fields
2.5.1 (14 May 2014)
- Little bufixes
2.5.0 (3 Sep 2013)
- Bufixes and a lot of compatability work by Daniele Varrazzo
Older releases lack release notes, first release of psycopg2cffi around Nov 2012.