[iotdb] python查询iotdb列
·
问题
查询iotdb表A,column1,column2。
在数据库客户端dbeaver查询,column1返回值1,column2返回值0。
在python使用sql查询,column1返回值0,column2返回值1。使用多个方法读取sql结果都与dbeaver查询结果不一致。
在java使用sql查询,column1返回值1,column2返回值0。

分析
在python中使用session方式连接iotdb并进行数据查询,具体代码如下:
from iotdb.Session import Session
session = Session(IOTDB_HOST, IOTDB_PORT, IOTDB_USER, IOTDB_PASSWORD)
session.open(False)
zone = session.get_time_zone()
sql=(
"select column1,column2"
"from root.ln.`table1` "
"where timestamp = 1755631605000 ;"
)
result = session.execute_query_statement(sql)
print("遍历所有结果")
while result.has_next():
row_record_column = result.construct_row_record_from_data_frame()
row_record_value=result.next()
print(row_record_column,row_record_value)
# 关闭结果集
session.close()
调试查询result返回的是内存地址。内存地址中存储的数据可能是json格式数据,使用session的方法,construct_row_record_from_data_frame()、next()解析都有误。
解决
使用请求方式获取iotdb数据,具体代码如下:
import requests
import json
import time
import base64
# 配置信息
# 创建 Basic 认证头
auth_header = "Basic " + base64.b64encode(f"{username}:{password}".encode()).decode()
def send_request(query_statement: str) -> dict:
"""
发送 HTTP 请求到 IoTDB 并返回响应结果
"""
# 请求配置
headers = {
"Content-Type": "application/json",
"Authorization": auth_header # 全局变量
}
data = {
"sql": query_statement
}
try:
# 发送请求
response = requests.post(
iotdb_url, # 全局变量
headers=headers,
json=data,
timeout=10
)
# 处理响应
if response.status_code == 200:
return response.json()
else:
raise RuntimeError(f"Failed to execute query: {response.reason}")
except Exception as e:
# 等待一秒后重试
time.sleep(1)
return send_request(query_statement)
if __name__ == '__main__':
while True:
# 构建查询语句
query_statement = """
select column1,column2
from root.ln.`table1`
where timestamp = 1755631605000 ;
"""
# 发送请求并获取响应结果
response = send_request(query_statement)
# 处理响应结果
print(response)
# 等待 10 秒后再次查询
time.sleep(10)
在控制台输出rsponse,结果与在数据库客户端查询结果一致。
更多推荐
所有评论(0)