PCM_Report/simple_influx_test.py

110 lines
3.3 KiB
Python
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#!/usr/bin/env python3
"""
简单的InfluxDB测试
"""
import json
import os
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
import time
def load_config():
config_path = os.path.join(os.path.dirname(__file__), "default.json")
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
return config.get('influx', {})
def test_simple_write_read():
config = load_config()
client = InfluxDBClient(
url=config.get('url'),
token=config.get('token'),
org=config.get('org')
)
bucket = config.get('bucket', 'PCM')
print("🧪 简单写入读取测试")
print(f"Bucket: {bucket}")
# 1. 写入数据 - 使用line protocol
print("\n1⃣ 使用line protocol写入...")
write_api = client.write_api(write_options=SYNCHRONOUS)
# 直接使用line protocol字符串
line_protocol = f"experiment_status,host=test status=\"1\",temp=25.0"
print(f"Line protocol: {line_protocol}")
try:
write_api.write(bucket=bucket, record=line_protocol)
print("✅ Line protocol写入成功")
except Exception as e:
print(f"❌ Line protocol写入失败: {e}")
return
# 等待一下让数据落盘
print("⏳ 等待2秒让数据落盘...")
time.sleep(2)
# 2. 查询数据
print("\n2⃣ 查询数据...")
query_api = client.query_api()
# 使用最简单的查询
query = f'''
from(bucket: "{bucket}")
|> range(start: -10m)
|> filter(fn: (r) => r._measurement == "experiment_status")
'''
print("查询语句:")
print(query)
try:
result = query_api.query(query)
found_data = False
for table in result:
print(f"表格: {table}")
for record in table.records:
found_data = True
print(f" 时间: {record.get_time()}")
print(f" measurement: {record.get_measurement()}")
print(f" field: {record.get_field()}")
print(f" value: {record.get_value()}")
print(f" tags: {record.values}")
if found_data:
print("✅ 找到数据!")
else:
print("❌ 没有找到数据")
# 尝试查询所有数据
print("\n3⃣ 查询bucket中的所有数据...")
query_all = f'from(bucket: "{bucket}") |> range(start: -1h) |> limit(n: 5)'
result_all = query_api.query(query_all)
all_found = False
for table in result_all:
for record in table.records:
all_found = True
print(f" measurement: {record.get_measurement()}")
print(f" field: {record.get_field()}")
print(f" value: {record.get_value()}")
break # 只显示第一条
if not all_found:
print("❌ bucket中没有任何数据")
except Exception as e:
print(f"❌ 查询失败: {e}")
import traceback
traceback.print_exc()
client.close()
if __name__ == "__main__":
test_simple_write_read()