Stream results of multi statement PostgreSQL queries from Python without a server-side cursor
Project description
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
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 |
e9b46d4e02654bc7ef8663ed8586aeb0bc6b8546f46f24447701fb2be263c57b
|
|
MD5 |
66cffceb7a7c8c5086c612515e2ae47d
|
|
BLAKE2b-256 |
f19f367ebb3ccf781ea82228fb6ded7f6886dc8154cc721b5686a30f0b07316f
|
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
Algorithm | Hash digest | |
---|---|---|
SHA256 |
da14d4066e27271c5b5401ef9f7904f8232237a2c2ecdf91b1ae2c6e7faab319
|
|
MD5 |
6eab699b0534357934d1ea30ba8c0918
|
|
BLAKE2b-256 |
96422ab625a276a9311754ec27bd9a085c920d4b20e93a1977217a4ae056323c
|