Python開發后端InfluxDB數據庫測試接口

1、使用PyCharm創建一個Python項目wzClear

2、新建package包wzInfluxdb和wzConfig包,如上圖所示,新建一個DB.json配置文件并添加influxdb配置信息,DB.json為統一配置文件

  {"influxdbV1": {"url": "http://192.168.0.44:8086","username": "root","password": "root","database": "wzClean","measurement": "HourData"}
}

3、搭建influxdb_util.py配置文件

import json
import os
import pandas as pd
from influxdb import InfluxDBClientclass InfluxDBUtil:def __init__(self, config_path='./wzConfig/DB.json'):self.client = Noneself.measurement = Noneself._load_config(config_path)self._connect()def _load_config(self, path):with open(path, 'r', encoding='utf-8') as f:config = json.load(f)influx = config['influxdbV1']self.host, self.port = influx['url'].replace("http://", "").split(":")self.username = influx['username']self.password = influx['password']self.database = influx['database']self.measurement = influx['measurement']def _connect(self):try:self.client = InfluxDBClient(host=self.host.strip(),port=int(self.port.strip()),username=self.username,password=self.password,database=self.database)self.log.info("InfluxDB connected.")except Exception as e:self.log.error(f"InfluxDB connection error: {e}")def insert(self, data: list):try:df = pd.DataFrame(data)if df.empty:self.log.warning("No data to insert.")returndf["time"] = pd.to_datetime(df["colTime"], format="%Y-%m-%d %H:%M:%S").dt.strftime("%Y-%m-%dT%H:%M:%SZ")df["colValue"] = df["colValue"].astype(str)df["isBreak"] = df["isBreak"].astype(str)df["proID"] = df["proID"].astype(str)df["varID"] = df["varID"].astype(str)json_body = df.apply(lambda row: {"measurement": self.measurement,"tags": {"proID": row["proID"],"varID": row["varID"]},"time": row["time"],"fields": {"colValue": row["colValue"],"isBreak": row["isBreak"]}}, axis=1).tolist()if self.client.write_points(json_body):self.log.info(f"{len(json_body)} points inserted into InfluxDB.")else:self.log.error("Failed to insert data.")except Exception as e:self.log.error(f"Insert error: {e}")def drop_measurement(self, measurement_name):"""刪除表:param measurement_name::return:"""try:self.client.query(f'DROP MEASUREMENT "{measurement_name}"')except Exception as e:print(f"Drop measurement error: {e}")def query(self, influxql: str):"""使用查詢數據庫信息:param influxql::return:"""try:result = self.client.query(influxql)points = list(result.get_points())return pointsexcept Exception as e:return []def close(self):if self.client:self.client.close()

4、接口測試,新建一個app.py,使用flask進行測試

from flask import Flask, request, jsonify, send_from_directory
from wzInfluxdb.influxdb_util import InfluxDBUtilapp = Flask(__name__,static_folder=ROOT_DIR + '/static',static_url_path='/static',template_folder=ROOT_DIR + '/templates')
@app.route('/searchObject', methods=['POST', 'GET'])
def searchObject():now = datetime.now()# 計算前一天 00:00:00 和 當天 00:00:00,轉為 UTCstart_dt = (now - timedelta(days=days)).replace(hour=0, minute=0, second=0, microsecond=0)end_dt = now.replace(hour=0, minute=0, second=0, microsecond=0)# 轉為 UTC ISO 格式start_time_utc = start_dt.astimezone(pytz.UTC).strftime('%Y-%m-%dT%H:%M:%SZ')end_time_utc = end_dt.astimezone(pytz.UTC).strftime('%Y-%m-%dT%H:%M:%SZ')# 構建 SQL 查詢  單個對象ID的查詢和繪制圖像sql = f"SELECT amount,strTime FROM HourData WHERE equID = '111' AND varID = '30' AND time >= '{start_time_utc}' AND time < '{end_time_utc}' "influxdb = InfluxDBUtil()# data2 = influxdb.query_measurement(condition="equID='202012021658119701893f93cec9970'", limit=5)data2 = influxdb.query(sql)return jsonify({"result": data2 })except Exception as e:return jsonify({"error": str(e)}), 500

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80361.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

采用LLaMa-Factory對QWen大模型實現微調(效果很好)

前言 LLaMA-factory是一個非常有用的開源框架。關于利用llama-factory實現大模型的微調&#xff0c;研究了有一個多月了&#xff0c;終于相對成功的微調了一個QWen的大模型。其中的曲折愿和大家分享&#xff01; 一、源碼的下載 在github上的網址&#xff1a; GitHub - hiyou…

深入理解深度Q網絡DQN:基于python從零實現

DQN是什么玩意兒&#xff1f; 深度Q網絡&#xff08;DQN&#xff09;是深度強化學習領域里一個超厲害的算法。它把Q學習和深度神經網絡巧妙地結合在了一起&#xff0c;專門用來搞定那些狀態空間維度特別高、特別復雜的難題。它展示了用函數近似來學習價值函數的超能力&#xf…

機械物理:水力發電站工作原理是什么?

水利發電站的工作原理是將水的勢能轉化為電能&#xff0c;主要依賴水體的重力作用與能量轉換設備。以下是其核心步驟和組成部分的詳細解釋&#xff1a; 1. 蓄水與勢能積累 水壩與水庫&#xff1a;通過建造水壩攔截河流&#xff0c;形成水庫蓄水。水位升高后&#xff0c;水體的…

[面試]SoC驗證工程師面試常見問題(五)TLM通信篇

SoC驗證工程師面試常見問題(五) 摘要:UVM (Universal Verification Methodology) 中的 TLM (Transaction Level Modeling) 通信是一種用于在驗證組件之間傳遞事務(Transaction)的高層次抽象機制。它通過端口(Port)和導出(Export)實現組件間的解耦通信,避免了信…

CAD屬性圖框值與Excel聯動(CAD塊屬性導出Excel、excel更新CAD塊屬性)——CAD c#二次開發

CAD插件實現塊屬性值與excel的互動&#xff0c;效果如下&#xff1a; 加載dll插件&#xff08;CAD 命令行輸入netload &#xff0c;運行xx即可導出Excel&#xff0c;運行xx1即可根據excel更新dwg塊屬性值。&#xff09; 部分代碼如下 // 4. 開啟事務更新CAD數據using (Transact…

【數據挖掘】Apriori算法

Apriori算法是經典的關聯規則挖掘算法&#xff0c;用于從事務型數據庫中發現頻繁項集和強關聯規則&#xff0c;特別常用于購物籃分析等場景。 &#x1f9e0; 核心思想&#xff08;Apriori原則&#xff09; 一個項集是頻繁的&#xff0c;前提是它的所有子集也必須是頻繁的。 即&…

單鏈表設計與實現

01. 單鏈表簡介 在數據結構中&#xff0c;單鏈表的實現可以分為 帶頭結點 和 不帶頭結點 兩種方式&#xff0c;這里我們討論第二種方式。 頭結點&#xff1a;鏈表第一個節點不存實際數據&#xff0c;僅作為輔助節點指向首元節點&#xff08;第一個數據節點&#xff09;。頭指…

【論文閱讀】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling

文章目錄 摘要一、介紹二、相關工作2.1. 鉸接對象建模2.2. 部件感知3D生成 三、方法3.1. 概述3.2. 通過VLM助手進行可移動部件分割3.3. 通過幾何感知視覺提示的發音估計3.4. 通過隨機關節狀態進行細化 四、實驗4.1. 定量實驗發音估計設置: 4.2. 應用程序 五、結論六、思考 摘要…

Zookeeper單機版安裝部署

目錄 1.1、概述1.2、系統環境1.3、部署流程1.3.1、下載安裝包1.3.2、解壓文件1.3.3、創建數據目錄和日志目錄1.3.4、配置ZooKeeper1.3.5、啟動ZooKeeper服務1.3.6、連接和驗證 1.4、Zookeeper服務管理命令1.4.1、啟動Zookeeper服務1.4.2、停止Zookeeper服務1.4.3、查看Zookeepe…

在 Elasticsearch 中刪除文檔中的某個字段

作者&#xff1a;來自 Elastic Kofi Bartlett 探索在 Elasticsearch 中刪除文檔字段的方法。 更多有關 Elasticsearch 文檔的操作&#xff0c;請詳細閱讀文章 “開始使用 Elasticsearch &#xff08;1&#xff09;”。 想獲得 Elastic 認證&#xff1f;查看下一期 Elasticsear…

元數據和主數據

元數據和主數據是數據管理中的兩個關鍵概念&#xff0c;其核心區別如下&#xff1a; 1. 定義與本質 元數據&#xff08;Metadata&#xff09; “關于數據的數據”&#xff0c;用于描述數據的屬性、結構、來源、用途等上下文信息。 示例&#xff1a;數據庫表的字段名稱、數據類型…

java的Stream流處理

Java Stream 流處理詳解 Stream 是 Java 8 引入的一個強大的數據處理抽象&#xff0c;它允許你以聲明式方式處理數據集合&#xff08;類似于 SQL 語句&#xff09;&#xff0c;支持并行操作&#xff0c;提高了代碼的可讀性和處理效率。 一、Stream 的核心概念 1. 什么是 Str…

llama-Factory不宜直接掛接Ollama的大模型

前言 llama-Factory嘗試使用Ollama本地安裝的大模型。 一、在Ollama中安裝QWen 安裝qwen:0.5b 安裝完成了&#xff1a; 同理安裝qwen2.5:0.5b 安裝完畢后&#xff0c;再用ollama list進行查看&#xff1a; 我們在chatbox中進行查看&#xff1a; 說明這兩個大模型&#xff0c;…

基于WSL用MSVC編譯ffmpeg7.1

在windows平臺編譯FFmpeg&#xff0c;網上的大部分資料都是推薦用msys2mingw進行編譯。在win10平臺&#xff0c;我們可以采用另一種方式&#xff0c;即wslmsvc 實現window平臺的ffmpeg編譯。 下面將以vs2022ubuntu22.04 為例&#xff0c;介紹此方法 0、前期準備 安裝vs2022 &…

vue3+vite項目引入tailwindcss

從2025年1月tailwindcss4.0發布開始使用tailwindcss比之前簡化很多 1,安裝 yarn add tailwindcss tailwindcss/vite2,配置vite.config.js import tailwindcss from tailwindcss/vite;...plugins: [tailwindcss(),...] ...3,在主css文件頂部添加 注意一定是css文件,不能是sc…

藍牙RFCOMM協議概述

RFCOMM概述 概念 RFCOMM 協議提供了對 L2CAP 協議上的串行端口的模擬。該協議基于 ETSI 標準 GSM 07.10。 RFCOMM 采用與 TS07.10 相同的字節序列方式。所有二進制數字都按照從低位到高位的順序&#xff0c;從左至右讀。 兩個使用RFCOMM通信的藍牙設備可以打開多個仿真串行端…

[工具]B站緩存工具箱 (By 郭逍遙)

&#x1f4cc; 項目簡介 B站緩存工具箱是一個多功能的B站緩存工具&#xff0c;包含視頻下載、緩存重載、文件合并及系統設置四大核心功能。基于yutto開發&#xff0c;采用圖形化界面操作&#xff0c;極大簡化B站資源獲取與管理流程。 工具可以直接將原本緩存的視頻讀取&#…

算法訓練營第十三天|226.翻轉二叉樹、101. 對稱二叉樹、 104.二叉樹的最大深度、111.二叉樹的最小深度

遞歸 遞歸三部曲&#xff1a; 1.確定參數和返回值2.確定終止條件3.確定單層邏輯 226.翻轉二叉樹 題目 思路與解法 第一想法&#xff1a; 遞歸&#xff0c;對每個結點進行反轉 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, le…

sunset:Solstice靶場

sunset:Solstice https://www.vulnhub.com/entry/sunset-solstice,499/ 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.244 3&#xff…

AZScreenRecorder最新版:功能強大、操作簡便的手機錄屏軟件

AZScreenRecorder最新版是一款功能強大的手機錄屏軟件&#xff0c;專為安卓設備設計。它無需ROOT權限&#xff0c;支持無限錄制時長&#xff0c;操作簡單&#xff0c;錄制過程中可以隨時暫停&#xff0c;滿足不同用戶的個性化錄屏需求。此外&#xff0c;用戶還可以自定義分辨率…