Skip to main content

Python SDK for DuckGresQL — DuckDB-compatible API for remote databases

Project description

DuckGresQL Python SDK

Python client for DuckGresQL — a DuckDB-compatible API for remote databases. Uses Arrow Flight SQL for fast query execution and a REST API for async job management.

Installation

Requires Python 3.11+

pip install duckgresql

With optional extras:

pip install duckgresql[pandas]   # adds fetchdf() support
pip install duckgresql[all]      # pandas + numpy

Quick Start

Synchronous

import duckgresql

conn = duckgresql.connect(
    token="dkgql_your_api_token",
    database="my_database",
)

# Execute a query
result = conn.execute("SELECT * FROM users LIMIT 10")
print(result.fetchall())

# Get a pandas DataFrame
df = conn.execute("SELECT * FROM sales").fetchdf()

# DML
result = conn.execute("INSERT INTO users (name) VALUES ('Alice')")
print(result.rowcount)  # affected rows

conn.close()

Async

import asyncio
import duckgresql

async def main():
    conn = await duckgresql.connect_async(
        token="dkgql_your_api_token",
        database="my_database",
    )

    result = await conn.execute("SELECT * FROM users")
    print(result.fetchall())

    await conn.close()

asyncio.run(main())

Context Manager

with duckgresql.connect(token="...", database="...") as conn:
    result = conn.execute("SELECT 1")
    print(result.fetchone())

Async Jobs (Long-Running Queries)

conn = duckgresql.connect(token="...", database="...")

job = conn.execute_async("SELECT * FROM very_large_table")
print(f"Job submitted: {job.job_id}")

# Poll until done (with exponential backoff)
result = job.result(timeout=600)
print(result.fetchall())

Connection Parameters

Parameter Default Description
token required API token (dkgql_…)
database required Database name or UUID

Result Methods

Method Returns Description
fetchone() tuple | None Next row
fetchmany(size) list[tuple] Up to size rows
fetchall() list[tuple] All remaining rows
fetchdf() DataFrame Pandas DataFrame (requires pandas)
fetchnumpy() dict[str, ndarray] NumPy arrays (requires numpy)
fetch_arrow_table() pyarrow.Table Zero-copy Arrow table

Result Properties

Property Type Description
description list | None DB-API 2.0 column metadata
rowcount int Row count or affected rows
columns list[str] Column names

Architecture

  • Arrow Flight SQL (gRPC) — Primary transport for execute(). Fast, columnar, zero-copy.
  • REST API — Used only for execute_async() (job submission/polling), since Flight SQL has no native job queue pattern.

Both transports authenticate via the same API token. Flight SQL uses BasicAuth handshake; REST uses the /connect endpoint to exchange the token for a session token.


Developing the SDK? See CONTRIBUTING.md for setup, testing, building, and publishing.

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

duckgresql-1.5.1.1.tar.gz (63.7 kB view details)

Uploaded Source

Built Distribution

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

duckgresql-1.5.1.1-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file duckgresql-1.5.1.1.tar.gz.

File metadata

  • Download URL: duckgresql-1.5.1.1.tar.gz
  • Upload date:
  • Size: 63.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for duckgresql-1.5.1.1.tar.gz
Algorithm Hash digest
SHA256 276988a06d030f51afd0641080c42ecf72a7c6eeebae7d89d80f373ac892e23a
MD5 69df37c131de1ce34f6ee210f8e3b837
BLAKE2b-256 c85684891fc2d0bcd69ca3a7ad768a435aa11cc3c972fb27b9ad729ee911bd2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckgresql-1.5.1.1.tar.gz:

Publisher: release.yml on Duckgresql/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file duckgresql-1.5.1.1-py3-none-any.whl.

File metadata

  • Download URL: duckgresql-1.5.1.1-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for duckgresql-1.5.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 58ea5bfc962c87c67a89f10c5a06e68a4047e1533a06522501b55a9c5a618578
MD5 7c0bf50a73cfeff4fdce5ad95fbde4cb
BLAKE2b-256 280347abc8db61b84e0078c0545e55bb5b0f38c918e537422f1a31e7ca109006

See more details on using hashes here.

Provenance

The following attestation bundles were made for duckgresql-1.5.1.1-py3-none-any.whl:

Publisher: release.yml on Duckgresql/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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