python读取influxdb中数据
示例代码一:从infludb中获取指定时间段time和value值,并作图保存
from influxdb_client import InfluxDBClient
import matplotlib.pyplot as plt# InfluxDB连接信息
url = "http://localhost:8086"
token = "your_token"
org = "your_org"
bucket = "your_bucket"# 创建InfluxDB客户端
client = InfluxDBClient(url=url, token=token, org=org)# 查询数据
query = f'from(bucket: "{bucket}") |> range(start: -10m)'
result = client.query_api().query(query)# 提取time和value
time = []
value = []
for table in result:for record in table.records:time.append(record.get_time().timestamp() % 600) # 将time转换为以秒为单位,取模600,record.get_time().timestamp()获取时间戳value.append(record.values["_value"])# 绘制图表
plt.plot(time, value)
plt.xlabel('Time (s)')
plt.ylabel('Value')
plt.title('InfluxDB Data')
plt.savefig('influxdb_data.png')
plt.show()
示例代码二:从infludb中获取指定时间段最大值、最小值、平均值等信息
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
from influxdb_client import query_api
from datetime import datetimetoken = "your_influxdb_token"
org = "your_influxdb_organization"
bucket = "your_influxdb_bucket"
url = "your_influxdb_url"client = InfluxDBClient(url=url, token=token, org=org)query = f'from(bucket:"{bucket}") |> range(start: 2022-01-01T00:00:00Z, stop: 2022-01-02T00:00:00Z) |> filter(fn: (r) => r._measurement == "measurement_name") |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)'result = client.query_api().query(org=org, query=query)mean_value = result[0].records[0].values['_value']
max_value = max([record.values['_value'] for record in result[0].records])
min_value = min([record.values['_value'] for record in result[0].records])print("平均值:", mean_value)
print("最大值:", max_value)
print("最小值:", min_value)
aggregateWindow
是InfluxDB的查询函数之一,用于在时间窗口内对数据进行聚合计算。它的基本语法如下:
aggregateWindow(every: duration, fn: aggregateFunction, createEmpty: boolean)
参数说明:
- `every`:指定时间窗口的持续时间,可以使用InfluxDB的持续时间字符串表示,例如"1h"表示1小时,"10m"表示10分钟。
- `fn`:指定聚合函数,可以是以下之一:- `count`:计算数据点的数量。- `sum`:计算数据点的总和。- `mean`:计算数据点的平均值。- `median`:计算数据点的中位数。- `min`:计算数据点的最小值。- `max`:计算数据点的最大值。- `mode`:计算数据点的众数。- `stddev`:计算数据点的标准差。- `first`:获取时间窗口内的第一个数据点。- `last`:获取时间窗口内的最后一个数据点。
- `createEmpty`:指定是否在时间窗口内没有数据点时创建空数据点,可选值为`true`或`false`。在上面的代码示例中,`aggregateWindow`函数被用于计算时间窗口内数据的平均值。根据示例中的查询语句,时间窗口的持续时间为1小时,聚合函数为`mean`,并且在时间窗口内没有数据点时不创建空数据点。你可以根据自己的需求选择不同的聚合函数和时间窗口的持续时间来实现不同的聚合计算。