You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2023/03/22 12:26:07 UTC
[iotdb] branch rel/0.13 updated: [To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.13 by this push:
new 85d4e803dc [To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)
85d4e803dc is described below
commit 85d4e803dc41c6a700e852a8ae5ffe088c02fa98
Author: Haonan <hh...@outlook.com>
AuthorDate: Wed Mar 22 20:26:00 2023 +0800
[To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)
---
client-py/iotdb/Session.py | 83 ++++++++++++++++++++++++++++++++++++++-
client-py/tests/test_dataframe.py | 14 +++----
2 files changed, 89 insertions(+), 8 deletions(-)
diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py
index 17a7c849f1..145fd94370 100644
--- a/client-py/iotdb/Session.py
+++ b/client-py/iotdb/Session.py
@@ -60,6 +60,7 @@ logger = logging.getLogger("IoTDB")
class Session(object):
SUCCESS_CODE = 200
+ MULTIPLE_ERROR = 506
DEFAULT_FETCH_SIZE = 10000
DEFAULT_USER = "root"
DEFAULT_PASSWORD = "root"
@@ -1034,6 +1035,86 @@ class Session(object):
verify success of operation
:param status: execution result status
"""
+ if status.code == Session.MULTIPLE_ERROR:
+ Session.verify_success_by_list(status.subStatus)
+ return 0
if status.code == Session.SUCCESS_CODE:
return 0
- return -1
+
+ logger.error("error status is %s", status)
+ raise RuntimeError(str(status.code) + ": " + status.message)
+
+ @staticmethod
+ def verify_success_by_list(status_list):
+ """
+ verify success of operation
+ :param status_list: execution result status
+ """
+ message = str(Session.MULTIPLE_ERROR) + ": "
+ for status in status_list:
+ if status.code != Session.SUCCESS_CODE:
+ message += status.message + "; "
+ raise RuntimeError(message)
+
+ def execute_raw_data_query(
+ self, paths: list, start_time: int, end_time: int
+ ) -> SessionDataSet:
+ """
+ execute query statement and returns SessionDataSet
+ :param paths: String path list
+ :param start_time: Query start time
+ :param end_time: Query end time
+ :return: SessionDataSet, contains query results and relevant info (see SessionDataSet.py)
+ """
+ request = TSRawDataQueryReq(
+ self.__session_id,
+ paths,
+ self.__fetch_size,
+ startTime=start_time,
+ endTime=end_time,
+ statementId=self.__statement_id,
+ enableRedirectQuery=False,
+ )
+ resp = self.__client.executeRawDataQuery(request)
+ return SessionDataSet(
+ "",
+ resp.columns,
+ resp.dataTypeList,
+ resp.columnNameIndexMap,
+ resp.queryId,
+ self.__client,
+ self.__statement_id,
+ self.__session_id,
+ resp.queryDataSet,
+ resp.ignoreTimeStamp,
+ )
+
+ def execute_last_data_query(self, paths: list, last_time: int) -> SessionDataSet:
+ """
+ execute query statement and returns SessionDataSet
+ :param paths: String path list
+ :param last_time: Query last time
+ :return: SessionDataSet, contains query results and relevant info (see SessionDataSet.py)
+ """
+ request = TSLastDataQueryReq(
+ self.__session_id,
+ paths,
+ self.__fetch_size,
+ last_time,
+ self.__statement_id,
+ enableRedirectQuery=False,
+ )
+
+ resp = self.__client.executeLastDataQuery(request)
+ return SessionDataSet(
+ "",
+ resp.columns,
+ resp.dataTypeList,
+ resp.columnNameIndexMap,
+ resp.queryId,
+ self.__client,
+ self.__statement_id,
+ self.__session_id,
+ resp.queryDataSet,
+ resp.ignoreTimeStamp,
+ )
diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py
index 6ff2d30ca4..f957c2da42 100644
--- a/client-py/tests/test_dataframe.py
+++ b/client-py/tests/test_dataframe.py
@@ -28,9 +28,9 @@ def test_simple_query():
session = Session(db.get_container_host_ip(), db.get_exposed_port(6667))
session.open(False)
- session.execute_non_query_statement("set storage group to root.device")
+ session.execute_non_query_statement("set storage group to root.device1")
# Write data
- session.insert_str_record("root.device", 123, "pressure", "15.0")
+ session.insert_str_record("root.device1", 123, "pressure", "15.0")
# Read
session_data_set = session.execute_query_statement("SELECT ** FROM root")
@@ -38,7 +38,7 @@ def test_simple_query():
session.close()
- assert list(df.columns) == ["Time", "root.device.pressure"]
+ assert list(df.columns) == ["Time", "root.device1.pressure"]
assert_array_equal(df.values, [[123.0, 15.0]])
@@ -47,9 +47,9 @@ def test_non_time_query():
db: IoTDBContainer
session = Session(db.get_container_host_ip(), db.get_exposed_port(6667))
session.open(False)
- session.execute_non_query_statement("set storage group to root.device")
+ session.execute_non_query_statement("set storage group to root.device1")
# Write data
- session.insert_str_record("root.device", 123, "pressure", "15.0")
+ session.insert_str_record("root.device1", 123, "pressure", "15.0")
# Read
session_data_set = session.execute_query_statement("SHOW TIMESERIES")
@@ -72,9 +72,9 @@ def test_non_time_query():
assert_array_equal(
df.values,
[[
- "root.device.pressure",
+ "root.device1.pressure",
None,
- "root.device",
+ "root.device1",
"FLOAT",
"GORILLA",
"SNAPPY",