Python读取influxDB数据库

news2024/10/26 0:24:21

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1497377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冬去春来天气阴晴不定 美食拿捏味蕾安稳换季

俗话说“春打六九头”&#xff0c;3月虽然已经入春&#xff0c;但是天气依然是凉飕飕的 &#xff0c;冬天春天的换季期&#xff0c;因为天气的变化&#xff0c;尤为痛苦。但是来到了换季期&#xff0c;天气也不总是那么稳定&#xff0c;随着气温的起伏&#xff0c;我们的食欲也…

[技术杂谈]解决右键没有vscode打开选项的问题

问题&#xff1a; 点击鼠标右键没有‘使用vscode打开’的选项。 原因&#xff1a; 在安装时没有勾选相关选项 解决办法&#xff1a; 新建一个reg文件写入下面文件&#xff0c;注意替换自己真实Code.exe路径 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\she…

Linux编程3.4 进程-进程标识

1、相关函数 #include<unistd.h> #include<sys/types.h> pid_t getpid(void); 获得当前进程ID uid_t getuid(void); 获得当前进程的实际用户ID uit_t geteuid(void); 获得当前进程的有效用户ID git_t getgid(void); 获得当前进程的用户组ID pit_t getppid(…

【物联网】-智能社会的分类

万物感知 感知物理世界&#xff0c;变成数字信号 &#xff08;温度、空间、触觉、嗅觉、听觉、视觉&#xff09; 万物互联 将数据变成online&#xff0c;使智能化 &#xff08;宽联接、广联接、多联接和深联接&#xff09; 万物智能 基于大数据和人工智能的应用 &#…

一周学会Django5 Python Web开发-Django5删除视图DeleteView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计31条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

安装VMWare+创建Linux虚拟机

点击VMware官网进入官网&#xff0c;下载VMware安装包。 一、安装VMware 一、安装VMware软件 &#xff08;1&#xff09;点击下一步 &#xff08;2&#xff09;勾选“我接受许可协议中的条款”&#xff0c;再点 ”击下一步“。 &#xff08;3&#xff09;选择下一步&#xf…

力扣刷题Day11--21. 合并两个有序链表(js)

目录 1&#xff0c;题目 2&#xff0c;代码 2.1迭代思想 2.2递归思想 3&#xff0c;学习与总结 3.1js中的链表类 3.2递归思想 3.3提醒自己 1&#xff0c;题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2&am…

买不到的数目c++

题目 输入样例&#xff1a; 4 7输出样例&#xff1a; 17 思路 一个字&#xff0c;猜。 一开始不知道怎么做的时候&#xff0c;想要暴力枚举对于特定的包装n, m&#xff0c;最大不能买到的数量maxValue是多少&#xff0c;然后观察性质做优化。那么怎么确定枚举结果是否正确呢…

微服务之商城系统

一、商城系统建立之前的一些配置 1、nacos Nacos是一个功能丰富的开源平台&#xff0c;用于配置管理、服务发现和注册、健康检查等&#xff0c;帮助构建和管理分布式系统。 在linux上安装nacos容器的命令&#xff1a; docker run --name nacos-standalone -e MODEstandalone …

Ubuntu环境配置-LinuxQQ篇

本教程下载Linux QQ的版本是linuxqq_3.0.0-571_amd64.deb 一、下载LinuxQQ 直接使用wget命令下载链接&#xff0c;下载文件 wget https://dldir1.qq.com/qqfile/qq/QQNT/c005c911/linuxqq_3.0.0-571_amd64.deb 二、安装LinuxQQ 当下载完成后&#xff0c;运行命令&#xff1a;…

Vue.js+SpringBoot开发海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

Qt+Opencv实现视频二维码检测

编译器&#xff1a;Qt 5.12.2Visual Studio 2015 视觉库&#xff1a;OpenCV 4.5.5 能够加载MP4格式视频、读取、定位二维码并输出与反馈信息的软件 需要演示Demo可私信

在centos7系统中如何给docker配置代理

一、需求场景 生产环境私有云中&#xff0c;通常一个集群的机器中只有几台机器可以直接访问公网&#xff0c;其他机器需要通过代理的方式从能访问公网的机器出去&#xff0c;在已经做了如下配置之后&#xff0c;使用docker pull命令已经报错超时timeout&#xff0c;这时可以尝…

电子签名签章:重塑企业办公方式,开启智能合约新时代!

在现代社会&#xff0c;随着科技的发展&#xff0c;纸质文件逐渐被电子文件所取代&#xff0c;传统的签名方式也面临着数字化的转型。电子签名签章云服务就是在这样的背景下应运而生的一种新型技术服务&#xff0c;它结合了云计算、大数据、人工智能等前沿技术&#xff0c;为用…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Checkbox)

提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 说明&#xff1a; API version 11开始&#xff0c;Checkbox默认样式由圆角方形变为圆形。 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口…

华容道问题求解_详细设计(三)之查找算法1_DFS

&#xff08;续上篇&#xff09; 使用DFS查找算法的原因是因为它符合本人的思考习惯&#xff0c;另外在第一版时用的就是这个方法&#xff0c;后来知道这不是查找这类问题的最好方法。 在前面的概要设计中的框图里描述的方法就是DFS&#xff0c;它可以找到一个解法&#xff0c;…

LVS集群 ----------------(直接路由 )DR模式部署

一、LVS集群的三种工作模式 lvs-nat&#xff1a;修改请求报文的目标IP,多目标IP的DNAT lvs-dr&#xff1a;操纵封装新的MAC地址&#xff08;直接路由&#xff09; lvs-tun&#xff1a;隧道模式 lvs-dr 是 LVS集群的 默认工作模式 NAT通过网络地址转换实现的虚拟服务器&…

STM32CubeIDE基础学习-代码编译介绍

STM32CubeIDE基础学习-代码的编译介绍 前言 当写完代码后&#xff0c;即在调试和下载代码之前都是需要对工程代码进行编译的操作&#xff0c;不然是无法正常进行代码调试和下载的&#xff0c;所以编译这一步是一个关键步骤。 下面就来介绍下STM32CubeIDE软件环境的代码编译方…

Spring Boot 3核心技术与最佳实践

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 highlight: a11y-dark 引言 Spring Boot作为…

C++ · 代码笔记3 · 引用

目录 前言011引用初探_引用与普通变量012引用初探_引用作为函数参数013引用初探_引用作为函数返回值014引用初探_引用返回局部函数造成的错误015引用初探_多级引用020引用与指针递增的区别030const与引用040使用const限定的函数形参引用 前言 本笔记所涉及到的编程环境与 《C …