Python读取influxDB数据库(一)(influxDB1.X版本)

本篇支持1.X版本,如果influxDB的版本是2.0以上的参考这篇:

Python读取influxDB数据库(二)(influxDB2.X版本)-CSDN博客

1. influxDB连接

首先用InfluxDBStudio软件连接influxDB数据库来查看所有表:

2. 写sql语句来查询数据

然后和平时写sql查询语句一样,先创建连接client,然后调用其query函数来查询获取数据

self.client = influxdb.InfluxDBClient(host=influx_host, port=influx_port, username=influx_username, password=influx_password, database=influx_database, timeout=influx_timeout)

query_sql = f"""select * from {table_name} \
                where point = '{temperature_point_id}'\
                and nowTime >= {begin_time} and nowTime < {end_time}"""
tables = self.client.query(query_sql)

3. 向influxDB数据库插入数据

插入数据时无需提前新建表,只需要指定表名直接插入即可:

self.influx_conn()
if data:
   
for i in range(len(data)):
        data[i].update({
"measurement": table_name})  # 加上表名
       
data[i].update({"time": now_time})  # 加上时间
   
self.client.write_points(data)
else:
   
print("data is None!")

4. 完整代码(code)

import influxdb
import pandas as pd
import datetime
import time


influx_host = "132.12.29.18"
influx_port = 8086
influx_username = "admin"
influx_password = "abc32100"
influx_database = "dqcloud"
influx_timeout = 10


def get_time_str(time_stamp):  # 时间戳转字符串
    time_array = time.localtime(int(time_stamp) / 1000)
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
    return time_str


class InfluxInfo(object):
    def __init__(self):
        pass

    def influx_conn(self):
        self.client = influxdb.InfluxDBClient(host=influx_host, port=influx_port, username=influx_username,
                                         password=influx_password, database=influx_database, timeout=influx_timeout)

    def query_data(self, table_name, temperature_point_id, begin_time, end_time):
        self.influx_conn()
        if type == "query":
            # point:测温点id,num:测温点编号,lastTime:上次测温时间,nowTime:巡检时间,v:温度值,tr:温升值
            query_sql = f"""select * from {table_name} \
                            where point = '{temperature_point_id}'\
                            and nowTime >= {begin_time} and nowTime < {end_time}"""
            tables = self.client.query(query_sql)
            if len(tables) > 0:
                return tables._get_series()
            else:
                return []

    def insert_data(self, table_name, now_time, data=None):
        self.influx_conn()
        if data:
            for i in range(len(data)):
                data[i].update({"measurement": table_name})  # 加上表名
                data[i].update({"time": now_time})  # 加上时间
            self.client.write_points(data)
        else:
            print("data is None!")


def get_data_by_tum(query_rslt):
    """
    "time": 数据插入时间(时序库自带的,不是自己插入的)
    "log": "巡检记录id"
    "point": "测温点id"
    "num": "测温点编号"
    "lastTime": "上次测温时间"
    "nowTime": "巡检时间"
    "v": "温度值"
    "tr": "温升值"
    "overTempAlert": "超温告警:0-否,1-是"
    "overTempWarning": "超温预警:0-否,1-是"
    "tempRiseAlert": "温升告警:0-否,1-是"
    """
    timelist = []  #
    nowTime_list = []
    lastTime_list = []
    tr_list = []
    valuelist = []
    if len(query_rslt) > 0:
        result = query_rslt[0]['values']
        for r in result:
            if len(r) > 4 and r[-1]:
                timestr = r[0].split(".")[0]
                timestr = timestr.replace("T", " ")
                timelist.append(timestr)
                lastTime_list.append(get_time_str(r[1]))
                nowTime_list.append(get_time_str(r[3]))
                tr_list.append(float(r[-2]))
                valuelist.append(float(r[-1]))
    if len(timelist) > 0:
        returndata = pd.DataFrame({'time': timelist, 'lastTime': lastTime_list, 'nowTime': nowTime_list, 'tr': tr_list, 'value': valuelist})
    else:
        returndata = pd.DataFrame()
    return returndata


if __name__ == '__main__':
    info = InfluxInfo()
    # "point": "测温点id"
    #     "nowTime": "预测时间"
    #     "v": "温度值"
    #     "tr": "温升值"
    #     "overTempWarning": "超温预警:0-否,1-是"
    #     "tempRiseWarning": "温升预警:0-否,1-是"
    data = [
        {
            "tags": {  # 标签,元数据信息和标识数据的键值对
                "point": "85231",
            },
            "fields": {  # 字段,实际的数值数据
                "predictTime": 1698289692244,
                "v": 44,
                "tr": 0.64,
                "overTempWarning": 0,
                "tempRiseWarning": 0
            }
        },
        {
            "tags": {
                "point": "85232",
            },
            "fields": {
                "predictTime": 1698289692292,
                "v": 45,
                "tr": 1.69,
                "overTempWarning": 0,
                "tempRiseWarning": 1
            }
        }
    ]
    now_time = datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%dT%H:%M:%SZ")
    info.insert_data("point_predict_data", now_time, data)

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值