Source code for getml.database.connect_hana

# Copyright 2022 The SQLNet Company GmbH
#
# This file is licensed under the Elastic License 2.0 (ELv2).
# Refer to the LICENSE.txt file in the root of the repository
# for details.
#


"""
Creates a new HANA database connection.
"""

from typing import Any, Dict, List, Optional

import getml.communication as comm
from getml import constants

from .connection import Connection


[docs]def connect_hana( user: str, password: str, host: str, port: int = 39017, default_schema: str = "public", ping_interval: int = 0, time_formats: Optional[List[str]] = None, conn_id: str = "default", ): """ Creates a new HANA database connection. Args: user (str): User name with which to log into the HANA database. password (str): Password with which to log into the HANA database. host (str): Host of the HANA database. port (int, optional): Port of the database. default_schema (str, optional): The schema within the database you want to connect use unless another schema is explicitly set. ping_interval (int, optional): The interval at which you want to ping the database, in seconds. Set to 0 for no pings at all. time_formats (List[str], optional): The list of formats tried when parsing time stamps. The formats are allowed to contain the following special characters: * %w - abbreviated weekday (Mon, Tue, ...) * %W - full weekday (Monday, Tuesday, ...) * %b - abbreviated month (Jan, Feb, ...) * %B - full month (January, February, ...) * %d - zero-padded day of month (01 .. 31) * %e - day of month (1 .. 31) * %f - space-padded day of month ( 1 .. 31) * %m - zero-padded month (01 .. 12) * %n - month (1 .. 12) * %o - space-padded month ( 1 .. 12) * %y - year without century (70) * %Y - year with century (1970) * %H - hour (00 .. 23) * %h - hour (00 .. 12) * %a - am/pm * %A - AM/PM * %M - minute (00 .. 59) * %S - second (00 .. 59) * %s - seconds and microseconds (equivalent to %S.%F) * %i - millisecond (000 .. 999) * %c - centisecond (0 .. 9) * %F - fractional seconds/microseconds (000000 - 999999) * %z - time zone differential in ISO 8601 format (Z or +NN.NN) * %Z - time zone differential in RFC format (GMT or +NNNN) * %% - percent sign conn_id (str, optional): The name to be used to reference the connection. If you do not pass anything, this will create a new default connection. Note: Not supported in the getML community edition. """ time_formats = time_formats or constants.TIME_FORMATS cmd: Dict[str, Any] = {} cmd["name_"] = "" cmd["type_"] = "Database.new" cmd["db_"] = "sap_hana" cmd["host_"] = host cmd["port_"] = port cmd["default_schema_"] = default_schema cmd["user_"] = user cmd["ping_interval_"] = ping_interval cmd["time_formats_"] = time_formats cmd["conn_id_"] = conn_id with comm.send_and_get_socket(cmd) as sock: # The password is sent separately, so it doesn't # end up in the logs. comm.send_string(sock, password) msg = comm.recv_string(sock) if msg != "Success!": comm.engine_exception_handler(msg) return Connection(conn_id=conn_id)