A InfluxDB API SDK
Project description
InfluxDB API SDK 
The repository includes an SDK for the InfluxDB v1 API and the Flux compatibility layer above InfluxDB version 1.8. It is possible to interact with all publicly available InfluxDB HTTP API endpoints supported by the influxdb-python client.
Differences between the influxdb-python and the influxdb_api_sdk
The influxdb_api_sdk is a maintained fork of the unmaintained influxdb-python client. The core differences are:
- Uses
urllib3instead ofrequestsfor HTTP communication - Supports msgpack encoding for more efficient data transfer
- Supports custom TCP socket options
- Supports custom SSL contexts for TLS/mTLS
- Python 3.10+ only (no Python 2 support)
- Modern
pyproject.toml-based packaging
The core features implemented in this library:
- All public InfluxDB v1 HTTP API endpoints are supported
- Flux query support (InfluxDB 1.8+)
- Possibility to specify custom and self-signed certificates via
ssl_context - UDP write support
- DataFrame client for pandas integration
- msgpack response encoding support
Installation
Please be aware not to install the influxdb and influxdb-api-sdk packages in parallel in the same environment. This results in name clashes and it is not possible to use the InfluxDB API SDK.
pip install influxdb-api-sdk
For DataFrame support:
pip install influxdb-api-sdk[dataframe]
Example
from influxdb import InfluxDBClient
client = InfluxDBClient(host="localhost", port=8086, username="root", password="root", database="mydb")
# Write data
client.write_points([
{
"measurement": "cpu_load",
"tags": {"host": "server01"},
"time": "2024-01-01T00:00:00Z",
"fields": {"value": 0.64}
}
])
# Query data
result = client.query("SELECT * FROM cpu_load")
for point in result.get_points():
print(point)
client.close()
Context Manager
The client can be used as a context manager:
from influxdb import InfluxDBClient
with InfluxDBClient(host="localhost", port=8086, database="mydb") as client:
client.write_points([...])
TLS / mTLS
It is possible to pass a custom ssl_context to the client to perform requests over HTTPS. More information can be found here.
TLS
import ssl
from influxdb import InfluxDBClient
ssl_ctx = ssl.create_default_context(
ssl.Purpose.SERVER_AUTH,
cafile="/path/to/ca.crt"
)
ssl_ctx.verify_mode = ssl.CERT_REQUIRED
client = InfluxDBClient(host="localhost", port=8086, ssl_usage=True, ssl_context=ssl_ctx)
mTLS
import ssl
from influxdb import InfluxDBClient
ssl_ctx = ssl.create_default_context(
ssl.Purpose.SERVER_AUTH,
cafile="/path/to/ca.crt",
)
ssl_ctx.verify_mode = ssl.CERT_REQUIRED
ssl_ctx.load_cert_chain(certfile="/path/to/client.crt", keyfile="/path/to/client.key")
client = InfluxDBClient(host="localhost", port=8086, ssl_usage=True, ssl_context=ssl_ctx)
Custom Socket Options
Custom TCP socket options can be passed to control keep-alive and other low-level settings:
import socket
from urllib3.connection import HTTPConnection
from influxdb import InfluxDBClient
socket_options = HTTPConnection.default_socket_options + [
(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60),
(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 15),
]
client = InfluxDBClient(host="localhost", port=8086, socket_options=socket_options)
Flux Queries (InfluxDB 1.8+)
from influxdb import InfluxDBClient
client = InfluxDBClient(host="localhost", port=8086)
result = client.query(
'from(bucket: "mydb/autogen") |> range(start: -1h)',
headers={"Content-Type": "application/vnd.flux"}
)
Development & Testing
Unit Tests
Unit tests run without a live InfluxDB instance (all HTTP calls are mocked):
make test-unit
# or directly:
uv run pytest tests/unittests
Integration Tests
Integration tests require a running InfluxDB 1.8 instance. The easiest way is to use the provided docker-compose.yml:
# Start InfluxDB, run all integration tests, then stop InfluxDB
make test-integration
# Keep InfluxDB running after the tests (useful during development)
make test-integration-keep
# Run both unit and integration tests
make test-all
You can also point the tests at an existing InfluxDB instance via environment variables:
| Variable | Default | Description |
|---|---|---|
INFLUXDB_HOST |
localhost |
InfluxDB hostname |
INFLUXDB_PORT |
8086 |
InfluxDB HTTP port |
INFLUXDB_USER |
root |
Username |
INFLUXDB_PASSWORD |
root |
Password |
INFLUXDB_HOST=my-server INFLUXDB_PORT=8086 \
uv run pytest -m integration tests/integrationtests -v
Linting
make lint
Contribution
If you would like to contribute something, have an improvement request, or want to make a change inside the code, please open a pull request.
Support
If you need support, or you encounter a bug, please don't hesitate to open an issue.
Donations
If you want to support my work, I ask you to take an unusual action inside the open source community. Donate the money to a non-profit organization like Doctors Without Borders or the Children's Cancer Aid. I will continue to build tools because I like them, and I am passionate about developing and sharing applications.
License
This product is available under the Apache 2.0 license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file influxdb_api_sdk-1.0.0.tar.gz.
File metadata
- Download URL: influxdb_api_sdk-1.0.0.tar.gz
- Upload date:
- Size: 39.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b369774a1c6bb5c332d52c59a2a6759ef6e8dcc7e86e3e0aa5b4cf74c75842d
|
|
| MD5 |
765d80bb5154920362833cbc044698a5
|
|
| BLAKE2b-256 |
b13996788118926296acce26552494dc3cbec6d7d0a5a9ffda7e79a3590f7998
|
File details
Details for the file influxdb_api_sdk-1.0.0-py3-none-any.whl.
File metadata
- Download URL: influxdb_api_sdk-1.0.0-py3-none-any.whl
- Upload date:
- Size: 43.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f03a6aa166b8d926f5b11980de5bf94e0520b4514a783cb8a7a89e54ea6d610f
|
|
| MD5 |
ddc90cc6a20801f7ab7e1b69f3724e48
|
|
| BLAKE2b-256 |
5de9acd53221fcd7cddfe90d1b0582ca4e1637734844b7a1a6c6e2a56ebfe473
|