Skip to main content

Stream results of multi statement PostgreSQL queries from Python without a server-side cursor

Project description

streampq CircleCI Test Coverage

Stream results of multi-statement PostgreSQL queries from Python without server-side cursors. Has benefits over some other Python PostgreSQL libraries:

  • Streams results from complex multi-statement queries even though SQL doesn't allow server-side cursors for such queries - suitable for large amounts of results that don't fit in memory.

  • CTRL+C (SIGINT) by default behaves as expected even during slow queries - a KeyboardInterrupt is raised and quickly bubbles up through streampq code. Unless client code prevents it, the program will exit.

  • Every effort is made to cancel queries on KeyboardInterrupt, SystemExit, or errors - the server doesn't continue needlessly using resources.

Installation

pip install streampq

The libpq binary library is also required. This is typically either already installed, or installed by:

  • macOS + brew: brew install libpq
  • Linux (Debian): apt install libpq5
  • Linux (Red Hat):yum install postgresql-libs

Usage

from streampq import streampq_connect

# libpq connection paramters
# https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS
#
# Any can be ommitted and environment variables will be used instead
# https://www.postgresql.org/docs/current/libpq-envars.html
connection_params = (
    ('host', 'localhost'),
    ('port', '5432'),
    ('dbname', 'postgres'),
    ('user', 'postgres'),
    ('password', 'password'),
)

# SQL statement(s) - if more than one, separate by ;
sql = '''
SELECT * FROM my_table WHERE my_col = {first};
SELECT * FROM my_other_table WHERE my_other_col = {second};
'''

with streampq_connect(connection_params) as query:
    for (columns, rows) in query(sql, literals=(
        ('first', 'a value'),
        ('second', 'another value'),
    )):
        for row in rows:
            pass

Exceptions

Exceptions derive from streampq.StreamPQError. If there is any more information available on the error, it's added as a string in its args property. This is included in the string representation of the exception by default.

Exception hierarchy

  • StreamPQError

    Base class for all explicitly-thrown exceptions

    • ConnectionError

      An error occurred while attempting to connect to the database.

    • QueryError

      An error occurred while attempting to run a query. Typically this is due to a syntax error or a missing column.

    • CancelError

      An error occurred while attempting to cancel a query.

    • CommunicationError

      An error occurred communicating with the database after successful connection.

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

streampq-0.0.11.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

streampq-0.0.11-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file streampq-0.0.11.tar.gz.

File metadata

  • Download URL: streampq-0.0.11.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.11

File hashes

Hashes for streampq-0.0.11.tar.gz
Algorithm Hash digest
SHA256 e9b46d4e02654bc7ef8663ed8586aeb0bc6b8546f46f24447701fb2be263c57b
MD5 66cffceb7a7c8c5086c612515e2ae47d
BLAKE2b-256 f19f367ebb3ccf781ea82228fb6ded7f6886dc8154cc721b5686a30f0b07316f

See more details on using hashes here.

File details

Details for the file streampq-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: streampq-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.11

File hashes

Hashes for streampq-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 da14d4066e27271c5b5401ef9f7904f8232237a2c2ecdf91b1ae2c6e7faab319
MD5 6eab699b0534357934d1ea30ba8c0918
BLAKE2b-256 96422ab625a276a9311754ec27bd9a085c920d4b20e93a1977217a4ae056323c

See more details on using hashes here.

Supported by

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