Skip to main content

Async PostgreSQL driver for Python written in Rust

Project description

PyPI - Python Version PyPI PyPI - Downloads

PSQLPy - Async PostgreSQL driver for Python written in Rust.

Driver for PostgreSQL written fully in Rust and exposed to Python. Main goals of the library is speed and type safety.

Documentation

You can find full documentation here - PSQLPy documentation

Installation

You can install package with pip or poetry.

poetry:

> poetry add psqlpy

pip:

> pip install psqlpy

Or you can build it by yourself. To do it, install stable rust and maturin.

> maturin develop --release

Usage

Usage is as easy as possible. Create new instance of ConnectionPool and start querying. You don't need to startup connection pool, the connection pool will create connections as needed.

from typing import Any

from psqlpy import ConnectionPool, QueryResult


async def main() -> None:
    db_pool = ConnectionPool(
        username="postgres",
        password="pg_password",
        host="localhost",
        port=5432,
        db_name="postgres",
        max_db_pool_size=2,
    )

    res: QueryResult = await db_pool.execute(
        "SELECT * FROM users",
    )

    print(res.result())
    db_pool.close()

Benchmarks

We have made some benchmark to compare PSQLPy, AsyncPG, Psycopg3. Main idea is do not compare clear drivers because there are a few situations in which you need to use only driver without any other dependencies.

So infrastructure consists of:

  1. AioHTTP
  2. PostgreSQL driver (PSQLPy, AsyncPG, Psycopg3)
  3. PostgreSQL v15. Server is located in other part of the world, because we want to simulate network problems.
  4. Grafana (dashboards)
  5. InfluxDB
  6. JMeter (for load testing)

The results are very promising! PSQLPy is faster than AsyncPG at best by 2 times, at worst by 45%. PsycoPG is 3.5 times slower than PSQLPy in the worst case, 60% in the best case.

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

psqlpy-0.6.0.tar.gz (119.0 kB view hashes)

Uploaded Source

Built Distributions

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-cp312-none-win_amd64.whl (1.1 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

psqlpy-0.6.0-cp312-none-win32.whl (1.0 MB view hashes)

Uploaded CPython 3.12 Windows x86

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

psqlpy-0.6.0-cp312-cp312-macosx_10_12_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

psqlpy-0.6.0-cp311-none-win_amd64.whl (1.1 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

psqlpy-0.6.0-cp311-none-win32.whl (1.0 MB view hashes)

Uploaded CPython 3.11 Windows x86

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-cp311-cp311-macosx_11_0_arm64.whl (1.3 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

psqlpy-0.6.0-cp311-cp311-macosx_10_12_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

psqlpy-0.6.0-cp310-none-win_amd64.whl (1.1 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

psqlpy-0.6.0-cp310-none-win32.whl (1.0 MB view hashes)

Uploaded CPython 3.10 Windows x86

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-cp310-cp310-macosx_11_0_arm64.whl (1.3 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

psqlpy-0.6.0-cp310-cp310-macosx_10_12_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

psqlpy-0.6.0-cp39-none-win_amd64.whl (1.1 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

psqlpy-0.6.0-cp39-none-win32.whl (1.0 MB view hashes)

Uploaded CPython 3.9 Windows x86

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

psqlpy-0.6.0-cp39-cp39-macosx_11_0_arm64.whl (1.3 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

psqlpy-0.6.0-cp39-cp39-macosx_10_12_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.9 macOS 10.12+ x86-64

psqlpy-0.6.0-cp38-none-win_amd64.whl (1.1 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

psqlpy-0.6.0-cp38-none-win32.whl (1.0 MB view hashes)

Uploaded CPython 3.8 Windows x86

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (2.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (2.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

psqlpy-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

Supported by

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