diff --git a/iotdb-client/client-py/TableModelSessionExample.py b/iotdb-client/client-py/TableModelSessionExample.py new file mode 100644 index 000000000000..616946c6a55b --- /dev/null +++ b/iotdb-client/client-py/TableModelSessionExample.py @@ -0,0 +1,79 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from iotdb.Session import Session + +# creating session connection. +ip = "127.0.0.1" +port_ = "6667" +username_ = "root" +password_ = "root" + +# don't specify database in constructor +session = Session(ip, port_, username_, password_, sql_dialect="table") +session.open(False) +session.execute_non_query_statement("CREATE DATABASE test1") +session.execute_non_query_statement("CREATE DATABASE test2") +session.execute_non_query_statement("use test2") + +# or use full qualified table name +session.execute_non_query_statement( + "create table test1.table1(region_id STRING ID, plant_id STRING ID, device_id STRING ID, model STRING ATTRIBUTE, temperature FLOAT MEASUREMENT, humidity DOUBLE MEASUREMENT) with (TTL=3600000)" +) +session.execute_non_query_statement( + "create table table2(region_id STRING ID, plant_id STRING ID, color STRING ATTRIBUTE, temperature FLOAT MEASUREMENT, speed DOUBLE MEASUREMENT) with (TTL=6600000)" +) + +# show tables from current database +with session.execute_query_statement("SHOW TABLES") as session_data_set: + print(session_data_set.get_column_names()) + while session_data_set.has_next(): + print(session_data_set.next()) + +# show tables by specifying another database +# using SHOW tables FROM +with session.execute_query_statement("SHOW TABLES FROM test1") as session_data_set: + print(session_data_set.get_column_names()) + while session_data_set.has_next(): + print(session_data_set.next()) + +session.close() + +# specify database in constructor +session = Session( + ip, port_, username_, password_, sql_dialect="table", database="test1" +) +session.open(False) + +# show tables from current database +with session.execute_query_statement("SHOW TABLES") as session_data_set: + print(session_data_set.get_column_names()) + while session_data_set.has_next(): + print(session_data_set.next()) + +# change database to test2 +session.execute_non_query_statement("use test2") + +# show tables by specifying another database +# using SHOW tables FROM +with session.execute_query_statement("SHOW TABLES") as session_data_set: + print(session_data_set.get_column_names()) + while session_data_set.has_next(): + print(session_data_set.next()) + +session.close() diff --git a/iotdb-client/client-py/iotdb/Session.py b/iotdb-client/client-py/iotdb/Session.py index 5aca06c2781d..d73749f20668 100644 --- a/iotdb-client/client-py/iotdb/Session.py +++ b/iotdb-client/client-py/iotdb/Session.py @@ -73,6 +73,7 @@ class Session(object): DEFAULT_PASSWORD = "root" DEFAULT_ZONE_ID = time.strftime("%z") RETRY_NUM = 3 + SQL_DIALECT = "tree" def __init__( self, @@ -83,6 +84,8 @@ def __init__( fetch_size=DEFAULT_FETCH_SIZE, zone_id=DEFAULT_ZONE_ID, enable_redirection=True, + sql_dialect=SQL_DIALECT, + database=None, ): self.__host = host self.__port = port @@ -103,6 +106,8 @@ def __init__( self.__enable_redirection = enable_redirection self.__device_id_to_endpoint = None self.__endpoint_to_connection = None + self.__sql_dialect = sql_dialect + self.__database = database @classmethod def init_from_node_urls( @@ -180,12 +185,15 @@ def init_connection(self, endpoint): else: client = Client(TBinaryProtocol.TBinaryProtocolAccelerated(transport)) + configuration = {"version": "V_1_0", "sql_dialect": self.__sql_dialect} + if self.__database is not None: + configuration["db"] = self.__database open_req = TSOpenSessionReq( client_protocol=self.protocol_version, username=self.__user, password=self.__password, zoneId=self.__zone_id, - configuration={"version": "V_1_0"}, + configuration=configuration, ) try: @@ -1364,6 +1372,8 @@ def execute_non_query_statement(self, sql): else: raise IoTDBConnectionException(self.connection_error_msg()) from None + if resp.database is not None: + self.__database = resp.database return Session.verify_success(resp.status) def execute_statement(self, sql: str, timeout=0):