Skip to main content

Official Python SDK for MonaDB — sync + async, built on httpx.

Project description

mona

Official Python SDK for MonaDB. Sync and async, built on httpx and pydantic.

Note: install the PyPI distribution mona-preview while the mona name is being acquired. The import package is always mona. Do not install mona-preview and mona in the same environment.

Install

pip install mona-preview

From source:

git clone https://github.com/rchowell/mona-python.git
cd mona-python
pip install -e .

Usage

from mona import Client

mo = Client(api_key="mk-...", base_url="https://mona.example.workers.dev")

mo.databases.create(name="beatles")

db = mo.database("beatles")
db.execute("create table beatles;")
db.insert(
    "beatles",
    {"name": "John"},
    {"name": "Paul"},
    {"name": "George"},
    {"name": "Ringo"},
)

rows = db.fetchall("select * from beatles;")
print(rows)
# [{"name": "John"}, {"name": "Paul"}, {"name": "George"}, {"name": "Ringo"}]

database("name") returns a handle for running SQL. Use insert for rows, execute for DDL and other statements (one statement or a batch), and fetchall to read rows back. Chain calls work too:

rows = db.execute("select * from beatles;").fetchall()

Control-plane helpers (create, list, get, delete) stay on client.databases.

Async

from mona import AsyncClient

async with AsyncClient(api_key="mk-...", base_url="https://mona.example.workers.dev") as mo:
    await mo.databases.create(name="beatles")
    db = mo.database("beatles")
    await db.execute("create table beatles;")
    await db.insert(
        "beatles",
        {"name": "John"},
        {"name": "Paul"},
        {"name": "George"},
        {"name": "Ringo"},
    )
    rows = await db.fetchall("select * from beatles;")

Configuration

Argument Env Default Notes
api_key MONA_API_KEY Bearer token sent on every request.
base_url MONA_BASE_URL Worker URL (serves control + data plane).
query_base_url base_url Override the data-plane host (local dev only).
timeout 30.0 Per-request timeout in seconds.
max_retries 2 Retries on connection errors (httpx transport).

Errors

All errors subclass mona.MonaError. API errors (mona.APIError and its subclasses AuthenticationError, BadRequestError, NotFoundError, ConflictError) carry status_code, code, and message.

Development

just test              # unit tests only
just lint              # ruff
just typecheck         # mypy
just build             # wheel + sdist

Publishing

GitHub release tags (e.g. v0.1.0-preview) and the PyPI version in src/mona/_version.py (e.g. 0.1.0) are set independently. Preview tags on GitHub, semver on PyPI.

  1. Bump src/mona/_version.py (PyPI version).
  2. Create a GitHub release with a preview tag (e.g. v0.1.0-preview), or run just publish locally with UV_PUBLISH_TOKEN set.
  3. On PyPI, add a trusted publisher for mona-preview pointing at rchowell/mona-python (recommended over long-lived API tokens).

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

mona_preview-0.1.1.tar.gz (61.5 kB view details)

Uploaded Source

Built Distribution

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

mona_preview-0.1.1-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file mona_preview-0.1.1.tar.gz.

File metadata

  • Download URL: mona_preview-0.1.1.tar.gz
  • Upload date:
  • Size: 61.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mona_preview-0.1.1.tar.gz
Algorithm Hash digest
SHA256 274a019f095a8409211c2cd980720a030b7a473c19696d3e6275eb6ab541fcb2
MD5 d177efebbf5bb630804d3642f6d1c1d2
BLAKE2b-256 aac47441d619286f84d8d6c6c32ca9bd64e37d3269956d5fbae798423096085c

See more details on using hashes here.

File details

Details for the file mona_preview-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mona_preview-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mona_preview-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 808bda454b2d494a52652c0af751dbeff4f0768028af437ecc902a8d6d6e1151
MD5 40ba32689b735e630f8433cef602414c
BLAKE2b-256 5342a6ae717c4ca8a2149cd19ef738054f772cb620919be73e57fe1ad6eeaccc

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