PythonからInfluxDBへアクセスするには、公式ライブラリを利用します。
ただ、公式ライブラリは2つ存在します。
この記事では、そのうちの一つであるinfluxdb-clientを説明しています。
本記事の内容
- influxdb-clientとは?
- influxdb-clientのシステム要件
- influxdb-clientのインストール
- InfluxDBのUI管理画面からTokenの発行
- influxdb-clientの動作確認
それでは、上記に沿って解説していきます。
influxdb-clientとは?
influxdb-clientとは、InfluxDBのクライアントライブラリのことを言います。
ただ、InfluxDBのクライアントライブラリと言えば、fluxdb-pythonが有名です。
そして、両方ともInfluxDB公式のライブラリになります。
ここで、それぞれのGitHubにおけるスターの数を見てみましょう。
fluxdb-python
influxdb-client
やはり、fluxdb-pythonの方がスターは多いです。
でも、今後はinfluxdb-clientをおススメします。
なぜなら、influxdb-clientはInfluxDB 2系に対応しているからです。
逆に、fluxdb-pythonはInfluxDB 2系には未対応のままとなります。
正確には、influxdb-clientが対応しているのは以下のバージョンです。
- InfluxDB 2系
- InfluxDB 1.8以降
対して、fluxdb-pythonはInfluxDB 1.7以前をサポートしています。
つまり、InfluxDBのバージョンによって、ライブラリを使い分ける必要があるということです。
よって、InfluxDB 2系をインストールした場合は、influxdb-clientを利用します。
最新版InfluxDBのインストールは、次の記事で解説しています。
以上、influxdb-clientについての説明をしました。
次は、influxdb-clientのシステム要件を確認しましょう。
influxdb-clientのシステム要件
現時点(2021年6月)でのinfluxdb-clientの最新バージョンは、1.18.0となります。
この最新バージョンは、2021年6月4日にリリースされています。
influxdb-clientのシステム要件は、以下の3つを確認しましょう。
- サポートOS
- Pythonバージョン
- ciso8601
それぞれを下記で説明します。
サポートOS
サポートOSに関しては、以下を含むクロスプラットフォーム対応となります。
- Windows
- macOS
- Linux
Pythonバージョン
サポート対象となるPythonのバージョンは以下。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
これは、以下のPython公式開発サイクルに準じています。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月 |
3.7 | 2018年6月27日 | 2023年6月 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.6に関しては、Numpyがすでにサポート打ち切っています。
おそらく、2021年の12月を見越してのことでしょう。
influxdb-clientにおいても、3.6はサポート対象外と考えた方がよいかもしれません。
Numpyのように、すぐにサポートの打ち切りがやってくる可能性があります。
ciso8601
ciso8601は、datetimeオブジェクトを扱うライブラリです。
機能としては、以下の規格である日付時刻文字列をPythonのdatetimeオブジェクトに変換します。
- ISO 8601
- RFC 3339
また、ciso8601はC言語で書かれています。
そのため、他のライブラリよりdatetimeオブジェクトへの変換が高速に処理できます。
InfluxDBにおいては、ログの登録日時が重要な処理となります。
influxdb-clientは、その日時を扱う処理でciso8601を利用しているということです。
なお、ciso8601はオプションです。
必須というわけではありません。
ciso8601がインストールされていれば、優先的にciso8601を利用するということです。
ただし、ciso8601のインストールには注意が必要となります。
influxdb-clientの公式ページでは、上記のように記載されています。
ビルドするために、必要ということでしょう。
ciso8601をインストールするのは、以下のコマンドとなります。
pip install ciso8601
ciso8601を必要とする場合は、上記コマンドで事前にインストールしておいてください。
まとめ
ciso8601以外では、それほど注意すべきことはありません。
Pythonが古ければアウトという程度でしょうかね。
Pythonのバージョンを上げる場合は、次の記事が参考になります。
Windowsの場合
Ubuntuの場合
Ubuntuの場合は、別途インストールという形になります。
単純にPythonをアップグレードしてはダメな理由を記事内で説明しています。
以上、influxdb-clientのシステム要件ついての説明でした。
次は、influxdb-clientをインストールしていきます。
influxdb-clientのインストール
最初に、現状のインストール済みパッケージを確認しておきます。
ciso8601を事前にインストールしていません。
>pip list Package Version ---------- ------- pip 21.1.2 setuptools 57.0.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、influxdb-clientのインストールです。
influxdb-clientのインストールは、以下のコマンドとなります。
pip install influxdb-client
インストールには、少しだけ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version --------------- --------- certifi 2021.5.30 influxdb-client 1.18.0 pip 21.1.2 python-dateutil 2.8.1 pytz 2021.1 Rx 3.2.0 setuptools 57.0.0 six 1.16.0 urllib3 1.26.5
ciso8601がなければ、python-dateutilを利用するということでしょう。
それ以外でも、そこそこ依存関係のあるパッケージがありますね。
sixが入っているのが、若干謎です。
sixは、Python2と3の互換性ライブラリになります。
そのため、3.6以降をサポートするinfluxdb-clientには関係ないはずです。
気になりますが、これ以上は追いかけません。
以上、influxdb-clientのインストールについての説明でした。
最後に、influxdb-clientの動作確認を行います。
influxdb-clientの動作確認
事前に、InfluxDB上で次のことを済ませておいてください。
- 初期セットアップ
- Tokenの発行
上記については、次の記事で解説しています。
上記を済ませていれば、次のサンプルコードを動かすことができるでしょう。
from influxdb_client import InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS # InfluxDBサーバーのIPアドレスとポート url = "http://192.168.33.60:8086" # 対象organization org = "test_organization" # 対象bucket bucket = "test_bucket" # 発行したToken token = "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●" client = InfluxDBClient(url=url, token=token, org=org) write_api = client.write_api(write_options=SYNCHRONOUS) query_api = client.query_api() p = Point("my_measurement").tag("location", "Prague").field("temperature", 25.3) write_api.write(bucket=bucket, record=p) ## using Table structure tables = query_api.query('from(bucket:"' + bucket + '") |> range(start: -10m)') for table in tables: print(table) for row in table.records: print (row.values)
ただし、次の部分は各自の環境用に変更してください。
# InfluxDBサーバーのIPアドレスとポート url = "http://192.168.33.60:8086" # 対象organization org = "test_organization" # 対象bucket bucket = "test_bucket" # 発行したToken token = "●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●"
上記コードを実行して、成功すると次のように表示されます。
FluxTable() columns: 9, records: 1 {'result': '_result', 'table': 0, '_start': datetime.datetime(2021, 6, 18, 5, 34, 32, 288950, tzinfo=tzutc()), '_stop': datetime.datetime(2021, 6, 18, 5, 44, 32, 288950, tzinfo=tzutc()), '_time': datetime.datetime(2021, 6, 18, 5, 36, 12, 839957, tzinfo=tzutc()), '_value': 25.3, '_field': 'temperature', '_measurement': 'my_measurement', 'location': 'Prague'}
実行する毎に、データが登録されていきます。
コードで言うと、下記の部分です。
write_api.write(bucket=bucket, record=p)
10分以内に登録したデータが、すべて表示されるようになっています。
その処理は、次のコードとなります。
## using Table structure tables = query_api.query('from(bucket:"' + bucket + '") |> range(start: -10m)') for table in tables: print(table) for row in table.records: print (row.values)
なお、UIの管理画面でも確認は可能です。
以下は、「Data Exploer」で確認しています。
以上、influxdb-clientの動作確認についての説明でした。