python influxDB 基本操作
Posted smile-yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python influxDB 基本操作相关的知识,希望对你有一定的参考价值。
问题描述
使用 python 编写脚本向 influxDB 1.x 版本中读数据、写数据等。
一定注意 influxDB 的版本问题,官方提供的 python client 例子大多数对于 2.x 版本的,请注意区分。
安装依赖
请确定本地安装好此依赖后进行后面的操作。
$ pip install influxdb
本地安装 influxDB 1.x
若已经安装 influxDB 请跳过此步骤。
前往官网下载 influxDB 1.x https://portal.influxdata.com/downloads/,根据自己的实际情况选择相应的平台。
创建 database
from influxdb import InfluxDBClient
if __name__ == '__main__':
host, port = "localhost", 8086
# 如果没有开启用户名和密码,则不需要填写这两个参数
username, password = "root", "123"
database = "test_mlops_baselina"
client = InfluxDBClient(host=host, username=username, port=port, database=database, password=password)
client.create_database("test_hello_world")
client.close()
运行后可以通过客户端软件查看增加的这个数据库,如图所示
删除数据库(一定要谨慎!!!)
from influxdb import InfluxDBClient
if __name__ == '__main__':
host, port = "localhost", 8086
# 如果没有开启用户名和密码,则不需要填写这两个参数
username, password = "root", "123"
database = "test_mlops_baselina"
client = InfluxDBClient(host=host, username=username, port=port, database=database, password=password)
client.drop_database("test_hello_world")
client.close()
添加 meaturement 以及序列
类似于mysql中的表,但是不同之处在于 mysql 一般是先创建表,再去添加字段,而这里直接就是一起了,一般会考虑把序列处理好以后,一次性写入。
概念 | MySQL | InfluxDB |
---|---|---|
数据库(同) | database | database |
表(不同) | table | measurement |
列(不同) | column(需要自定义索引) | tag (带索引,非必须)、field(不带索引)、timestemp(唯一主键) |
from influxdb import InfluxDBClient
if __name__ == '__main__':
host, port = "localhost", 8086
username, password = "root", "123"
database = "test_hello_world"
client = InfluxDBClient(host=host, username=username, port=port, database=database, password=password)
points = [
'measurement': 'table1',
'tags':
'host': 'server01',
'region': 'us-west'
,
'time': '2022-10-24T12:00:00Z',
'fields':
'value': 0.64
,
'measurement': 'table1',
'tags':
'host': 'server01',
'region': 'us-west'
,
'time': '2022-10-24T13:00:00Z',
'fields':
'value': 0.88
]
client.write_points(points, database=database)
client.close()
为了方便接下来的测试效果,我对上面的代码中 json 部分做了一定的修改,更改其中 measurement 为 table2,重新运行一下效果如图:
获取所有的 measurements
这里需要添加 header ,避免出现以下问题:
requests.exceptions.ContentDecodingError:
('Received response with content-encoding: gzip, but failed to decode it.',
error('Error -3 while decompressing data: incorrect header check'))
from influxdb import InfluxDBClient
if __name__ == '__main__':
host, port = "localhost", 8086
username, password = "root", "123"
database = "test_hello_world"
headers =
'User-Agent': 'python-requests/2.24.0',
'Accept': '*/*',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Authorization': 'Basic cm9vdDpyb290'
client = InfluxDBClient(host=host, username=username, port=port, database=database, password=password,
headers=headers)
print(client.get_list_measurements())
client.close()
输出内容为:
['name': 'table1', 'name': 'table2']
获取某一个 measurement 中的某一列值
这个过程类似于 mysql 中确定 database 以后,再确定哪一张表,然后再找到对应的某一列属性。
from influxdb import InfluxDBClient
if __name__ == '__main__':
host, port = "localhost", 8086
username, password = "root", "123"
database = "test_hello_world"
headers =
'User-Agent': 'python-requests/2.24.0',
'Accept': '*/*',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Authorization': 'Basic cm9vdDpyb290'
client = InfluxDBClient(host=host, username=username, port=port, database=database, password=password,
headers=headers)
sql = "SELECT value FROM table1"
print(list(client.query(sql).get_points()))
client.close()
输出的结果为:
['time': '2022-10-24T12:00:00Z', 'value': 0.64, 'time': '2022-10-24T13:00:00Z', 'value': 0.88]
类似的更多 sql 语句自行拼写就好了,这里不再列举与 sql 相关的例子,包括多条件查询等等。
当然 select * from … 也是可以的。
总结
可以类比 mysql 来熟悉 influxDB ,总体而言不算复杂,并且随着大家对时序数据的关注,可能会存在越来越多的类似的开源框架,根据实际需求选择,并且熟悉官方文档,多查阅资料,这都是常规操作。
Smileyan
2022.10.27 00:03
以上是关于python influxDB 基本操作的主要内容,如果未能解决你的问题,请参考以下文章
JMeter - 实时结果 - InfluxDB和Grafana - 第1部分 - 基本设置