docs: def get_connection_string(params, hide_password=True):
          """Get a database connection string
  
          Args:
              params (dict): database configuration, as defined in :mod:`ozelot.config`
              hide_password (bool): if True, the password is hidden in the returned string
                  (use this for logging purposes).
  
          Returns:
              str: connection string
          """
          connection_string = params['driver'] + '://'
  
          user = params.get('user', None)
          password = params.get('password', None)
          host = params.get('host', None)
          port = params.get('port', None)
          database = params.get('database', None)
  
          if database is None:
              raise ValueError("Field 'database' of connection parameters cannot be None.")
  
          # if password is not set, try to get it from keyring
          if password is None and user is not None:
              # noinspection PyTypeChecker
              password = Client._get_password(params)
  
              if password is None:
                  raise RuntimeError("Password not defined and not available in keyring.")
  
          # don't add host/port/user/password if no host given
          if host is not None:
  
              # don't add user/password if user not given
              if user is not None:
                  connection_string += user
  
                  # omit zero-length passwords
                  if len(password) > 0:
                      if hide_password:
                          connection_string += ":[password hidden]"
                      else:
                          connection_string += ":" + password
  
                  connection_string += "@"
  
              connection_string += host
  
              if port is not None:
                  connection_string += ':' + str(port)
  
          # noinspection PyTypeChecker
          connection_string += '/' + database
  
          return connection_string