streampq

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
KeyboardInterruptis 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.
-
Metadata
Release files for streampq 0.0.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| streampq-0.0.11.tar.gz | 6.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| streampq-0.0.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.3 kB
Release files / streampq-0.0.11.tar.gz
| Download URL | streampq-0.0.11.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9b46d4e02654bc7ef8663ed8586aeb0bc6b8546f46f24447701fb2be263c57b
|
|
BLAKE2b-256 checksum How to use checksums |
f19f367ebb3ccf781ea82228fb6ded7f6886dc8154cc721b5686a30f0b07316f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.8.11
|
Release files / streampq-0.0.11-py3-none-any.whl
| Download URL | streampq-0.0.11-py3-none-any.whl |
|---|---|
| Size | 6.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
da14d4066e27271c5b5401ef9f7904f8232237a2c2ecdf91b1ae2c6e7faab319
|
|
BLAKE2b-256 checksum How to use checksums |
96422ab625a276a9311754ec27bd9a085c920d4b20e93a1977217a4ae056323c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.8.11
|
Security for streampq 0.0.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.