Skip to main content

Internal Partenamut library for PostgreSQL access using Psycopg 3

Project description

aa-psycopg

Internal Partenamut library for PostgreSQL access using Psycopg 3.
Provides a simple and efficient interface for interacting with PostgreSQL using:

  • A direct connection (PostgreSQLConnection)
  • A connection pool (PostgreSQLPool)

Supports query execution (SELECT, INSERT, UPDATE, DELETE), transactions, schema caching, and query runtime statistics.


Installation

pip install aa-psycopg

Requirements



Features

  • Easy-to-use wrapper for psycopg3.
  • Connection pooling via psycopg_pool.
  • Automatic query runtime tracking.
  • Safe connection string handling (masks passwords in logs).
  • Schema caching for executed queries.

API overview

  • ping(retries=0, timeout=60, query_name="ping") -> bool
    Test database connectivity.
  • read(query, params=None, query_name=None) -> list[dict]
    Execute a SELECT query. Set query_name to track query runtime statistics.
  • write(query, params=None, returning=False, query_name=None) -> list[dict] | None
    Execute INSERT/UPDATE/DELETE (optionally returning results). Set query_name to track query runtime statistics.
  • execute_transaction(queries_params, query_name=None)
    Run multiple queries inside a transaction. Set query_name to track query runtime statistics.
  • get_stats() -> dict
    Retrieve runtime stats (execution time & call count per query_name).
  • get_schema(query) -> list[psycopg.Column]
    Get schema for a previously executed query.

Usage

Direct Connection

from aa_psycopg.connection import PostgreSQLConnection
with PostgreSQLConnection(
    user="myuser",
    password="mypassword",
    host="localhost",
    port=5432,
    db="mydatabase"
) as client:
    # Check if database is alive
    if client.ping():
        print("Database reachable!")
    # Read data
    rows = client.read("SELECT * FROM my_table", query_name="fetch_all")
    print(rows)
    # Write data
    client.write(
        "INSERT INTO my_table (name) VALUES (%(name)s)",
        params={"name": "example"},
        query_name="insert_row"
    )
    # Transaction
    client.execute_transaction([
        ("INSERT INTO my_table (name) VALUES (%(name)s)", {"name": "row1"}),
        ("INSERT INTO my_table (name) VALUES (%(name)s)", {"name": "row2"}),
    ], query_name="bulk_insert")
    # Query stats
    print(client.get_stats())

Connection Pool

from aa_psycopg.pool import PostgreSQLPool
with PostgreSQLPool(
    user="myuser",
    password="mypassword",
    host="localhost",
    port=5432,
    db="mydatabase",
    min_size=1,
    max_size=5
) as client:
    # Check connectivity
    client.ping()
    # Fetch results
    results = client.read("SELECT * FROM users WHERE active = true", query_name="active_users")
    print(results)
    # Insert with RETURNING
    new_ids = client.write(
        "INSERT INTO users (name) VALUES (%(name)s) RETURNING id",
        params={"name": "Alice"},
        returning=True,
        query_name="insert_user"
    )
    print(new_ids)
    # Bulk transaction
    client.execute_transaction([
        ("UPDATE users SET active=false WHERE id=%(id)s", {"id": 1}),
        ("DELETE FROM users WHERE active=false", None),
    ], query_name="cleanup")
    # Stats
    print(client.get_stats())

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.


License

MIT

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

aa_psycopg-0.1.2.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aa_psycopg-0.1.2-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file aa_psycopg-0.1.2.tar.gz.

File metadata

  • Download URL: aa_psycopg-0.1.2.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.7

File hashes

Hashes for aa_psycopg-0.1.2.tar.gz
Algorithm Hash digest
SHA256 0d2a2e8085f46b1fa8e9ce5a7f15d9d549bf7756985177574dda025a78597208
MD5 1e26751467e4812a7f78a37ce2cc1a3a
BLAKE2b-256 ff856b8a0acc878b3743cc9787473c19f6b152a8a91573cbb060ab6d2ea2d1d8

See more details on using hashes here.

File details

Details for the file aa_psycopg-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for aa_psycopg-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bb8f5dacb87e7c85b69903a2752fe88a7b246f7bfead4fe7be2463c34531ffa4
MD5 f19a4d698b2c9060afdd5cca9999c594
BLAKE2b-256 db46238f6c4003f3869fe15bf8bf7ce13079acce91d66265888ec42f7ecfed96

See more details on using hashes here.

Supported by

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