This is the official Python client library for QuestDB.
This client library implements QuestDB's variant of the Ingestion Line Protocol (ILP) over HTTP and TCP.
ILP provides the fastest way to insert data into QuestDB.
This implementation supports authentication and full-connection encryption with TLS.
The latest stable version of the library is 2.0.4 (changelog).
python3 -m pip install -U questdb[dataframe]
The latest pre-release version of the library is 3.0.0r1 (changelog). This release supports NumPy float64 arrays which are transmitted over a new protocol version supported by QuestDB 8.4.0 or later.
python3 -m pip install --pre -U questdb[dataframe]
Start by setting up QuestDB . Once set up, you can use this library to insert data.
The most common way to insert data is from a Pandas dataframe.
import pandas as pd
from questdb.ingress import Sender
df = pd.DataFrame({
'symbol': pd.Categorical(['ETH-USD', 'BTC-USD']),
'side': pd.Categorical(['sell', 'sell']),
'price': [2615.54, 39269.98],
'amount': [0.00044, 0.001],
# NumPy float64 arrays are supported from v3.0.0rc1 onwards.
'ord_book_bids': [
np.array([2615.54, 2618.63]),
np.array([39269.98, 39270.00])
],
'timestamp': pd.to_datetime(['2021-01-01', '2021-01-02'])})
conf = f'http::addr=localhost:9000;'
with Sender.from_conf(conf) as sender:
sender.dataframe(df, table_name='trades', at='timestamp')
You can also send individual rows. This only requires a more minimal installation:
python3 -m pip install -U questdb
from questdb.ingress import Sender, TimestampNanos
conf = f'http::addr=localhost:9000;'
with Sender.from_conf(conf) as sender:
sender.row(
'trades',
symbols={'symbol': 'ETH-USD', 'side': 'sell'},
columns={
'price': 2615.54,
'amount': 0.00044,
# NumPy float64 arrays are supported from v3.0.0rc1 onwards.
'ord_book_bids': np.array([2615.54, 2618.63]),
},
at=TimestampNanos.now())
sender.flush()
To connect via the older TCP protocol, set the configuration string to:
conf = f'tcp::addr=localhost:9009;'
with Sender.from_conf(conf) as sender:
...
You can continue by reading the Sending Data Over ILP guide.
Stop by our Community Forum to chat with the QuestDB team.
You can also sign up to our mailing list to get notified of new releases.
The code is released under the Apache License 2.0.