Installation

Dependency

The Python QuestDB client runs on any version of Python >= 3.10 on most platforms and architectures. Its only required run-time dependency is numpy>=1.21.0.

Optional Dependencies

The dataframe extra bundles pandas and pyarrow:

  • dataframepandas and pyarrow

Install it to ingest a pandas DataFrame, or to use the to_pandas / to_arrow / iter_* helpers on QuestDB.query() results. polars, pyarrow, duckdb and any other Arrow-native source need no extra — they go through the Arrow PyCapsule Interface; just install the source library as usual.

Without it, you may still ingest data row-by-row through Sender.row(), and read query results through the __arrow_c_stream__ PyCapsule protocol.

PIP

DataFrame ingest (pandas + pyarrow):

python3 -m pip install -U questdb[dataframe]

Row-only:

python3 -m pip install -U questdb

Poetry

Equivalents for poetry:

poetry add questdb[dataframe]
poetry add questdb

Verifying the Installation

If you want to check that you’ve installed the wheel correctly, you can run the following statements from a python3 interactive shell:

>>> import questdb
>>> questdb.__version__
'5.0.0'
>>> questdb.connect
<function connect at 0x104b68240>

With a QuestDB server running locally, you can verify a full round trip (ingestion and query) in a few lines:

>>> import questdb
>>> db = questdb.connect('ws::addr=localhost:9000;')
>>> with db.sender() as sender:
...     sender.row('install_check', columns={'x': 1},
...                at=questdb.ServerTimestamp)
...     sender.flush(wait=True)
>>> db.query('SELECT count() FROM install_check').to_pandas()
   count
0      1
>>> db.close()

flush(wait=True) confirms the server accepted the row, but query visibility follows asynchronously once the WAL is applied — if the count reads 0, re-run the query.