使用python对influxdb2.0 进行读、写、删除操作

参考

【InfluxDB V2.0】介绍与使用,flux查询、数据可视化_influxdb2.0使用和管理-CSDN博客

-----------------------------------------------------------------------------------------------------------------------

python对influxdb 2.0 操作文档

https://docs.influxdata.com/influxdb/v2/api-guide/client-libraries/python/

InfluxDB OSS v2 Documentation

-----------------------------------------------------------------------------------------------------------------------

插入数据方法参考:

时序数据库influxDB(三)Python连接TSDB——influxDB2_influx2 py-CSDN博客

-----------------------------------------------------------------------------------------------------------------------

读取数据参考:本质上是使用python向influxdb发送一条FLUX查询语句让其返回数值

https://influxdb-client.readthedocs.io/en/latest/api.html#queryapi

-----------------------------------------------------------------------------------------------------------------------

删除数据参考:

InfluxDB

User Guide — influxdb_client 1.46.0dev0 documentation

-----------------------------------------------------------------------------------------------------------------------

FLUX数据脚本语言:

Flux数据脚本语言_flux语言-CSDN博客

-----------------------------------------------------------------------------------------------------------------------

插入数据方法,详细请参照上面的链接。

from datetime import datetime
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS

bucket = "<my-bucket>"
org = "<my-org>"
token = "<my-token>"

with InfluxDBClient(url="http://localhost:8086/", token=token, org=org) as client:
    write_api = client.write_api(write_options=SYNCHRONOUS)

    # 写入方法1
    data = "mem,host=host1 used_percent=19.43234543"
    write_api.write(bucket, org, data)

    # 写入方法2 (推荐这种)
    point = Point("mem") \
        .tag("host", "host1") \
        .field("used_percent", 26.43234545) \
        .time(datetime.utcnow(), WritePrecision.NS)
    write_api.write(bucket, org, point)

     #写入方法3
    sequence = ["mem,host=host1 used_percent=30.43234543",
                "mem,host=host1 available_percent=37.856523"]
    write_api.write(bucket, org, sequence)

    # TODO 这里写查询

    # 用完关闭
    client.close()
data = "mem,host=host1 used_percent=19.43234543"
write_api.write(bucket, org, data)

mem可以替换为任意字符串当作表头,对应参数:_measurement

host = host1 ,host1可以替换为任意字符串,对应参数host

used_percent 可以替换为任意  变量名(数据的名字),对应参数_field,19.43234543就是数据。

point = Point("mem") \
        .tag("host", "host1") \
        .field("used_percent", 26.43234545) \
        .time(datetime.utcnow(), WritePrecision.NS)
    write_api.write(bucket, org, point)

mem可以替换为任意字符串当作表头,对应参数:_measurement

host = host1 ,host1可以替换为任意字符串,对应参数host

used_percent 可以替换为任意  变量名(数据的名字),对应参数_field,26.4323就是数据。

sequence = ["mem,host=host1 used_percent=30.43234543",
            "mem,host=host1 available_percent=37.856523"]
    write_api.write(bucket, org, sequence)

写入多个数据

mem可以替换为任意字符串当作表头,对应参数:_measurement

host = host1 ,host1可以替换为任意字符串,对应参数host

used_percent 可以替换为任意  变量名(数据的名字),对应参数_field,26.4323就是数据。

---------------------------------------------------------------------------------------------------------------------------------

读取数据方法:

import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS

bucket = "<my-bucket>"
org = "<my-org>"
token = "<my-token>"

# Store the URL of your InfluxDB instance
url = "http://localhost:8086/"

client = influxdb_client.InfluxDBClient(
    url=url,
    token=token,
    org=org
)

# Query script
query_api = client.query_api()
query = 'from(bucket: "interesting_data")\
  |> range(start: 2024-09-10T04:00:00Z, stop: 2024-09-10T06:00:00Z)\
  |> filter(fn: (r) => r["_measurement"] == "mem")\
  |> filter(fn: (r) => r["_field"] == "used_percent")\
  |> filter(fn: (r) => r["host"] == "host1")\
  |> aggregateWindow(every: 1s, fn: mean, createEmpty: false)\
  |> yield(name: "mean")'
result = query_api.query(org=org, query=query)
results = []
for table in result:
    for record in table.records:
        results.append((record.get_field(), record.get_value()))

print(results)

直接复制就行,核心是flux语句。

bucket = "<my-bucket>"
org = "<my-org>"
token = "<my-token>"

对应桶、组织、令牌

query = 'from(bucket: "interesting_data")\
  |> range(start: 2024-09-10T04:00:00Z, stop: 2024-09-10T06:00:00Z)\
  |> filter(fn: (r) => r["_measurement"] == "mem")\
  |> filter(fn: (r) => r["_field"] == "used_percent")\
  |> filter(fn: (r) => r["host"] == "host1")\
  |> aggregateWindow(every: 1s, fn: mean, createEmpty: false)\
  |> yield(name: "mean")'
result = query_api.query(org=org, query=query)
results = []

range(start: 2024-09-10T04:00:00Z, stop: 2024-09-10T06:00:00Z)用来确定查询时间范围

range()有两个参数,分别是start和stop。

# Relative time range with start only. Stop defaults to now.
'from(bucket:"example-bucket")\
  |> range(start: -1h)'
 
# Relative time range with start and stop
'from(bucket:"example-bucket")\
  |> range(start: -1h, stop: -10m)'
 
# 使用绝对时间
'from(bucket:"example-bucket")\
  |> range(start: 2024-09-10T04:00:00Z, stop: 2024-09-10T06:00:00Z)'
 
# 过去十五分钟的数据
'from(bucket:"example-bucket")\
  |> range(start: -15m)'

filter() 过滤数据 满足时间、 _measurement 、_field、host条件的数据就会输出回来

aggregateWindow()辅助函数,详细看FLUX语句文章4.5.7

其中every会将数据按时间分成块,输出的数据是这个块中的平均值。

使用 Flux 的 yield() 函数将过滤后的表作为查询结果输出。

result里面就带有数据,直接用for循环就能打印出来了

---------------------------------------------------------------------------------------------------------------------------------

删除方法:

from influxdb_client import InfluxDBClient

bucket = "<my-bucket>"
org = "<my-org>"
token = "<my-token>"

client = InfluxDBClient(url="http://localhost:8086", token=token)

delete_api = client.delete_api()

"""
Delete Data
"""
start = "2024-09-09T00:00:00Z"
stop = "2024-09-10T10:20:00Z"
delete_api.delete(start, stop, '_measurement="mem"AND host="host1"', bucket=bucket, org=org)

"""
Close client
"""
client.close()

核心函数:

delete_api.delete(start, stop, '_measurement="mem"AND host="host1"', bucket=bucket, org=org)

mem可以替换为任意字符串当作表头,对应参数:_measurement

host = host1 ,host1可以替换为任意字符串,对应参数host

---------------------------------------------------------------------------------------------------------------------------------

注意事项:

incluxdb 存储数据的时间是系统时区的UTC时间。如果在东八区10:00点插入数据,查询结果,time为2:00

要么手动更改-8h,要么找别的方法来对上这个时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值