class_docstr: SQL connectors are used to connect to SQL databases in different dialects.
class_docstr_tok: ["SQL","connectors","are","used","to","connect","to","SQL","databases","in","different","dialects","."]
docstr: Initialize the SQL connector with the given configuration.
  
  Args:
      config (ConnectorConfig): The configuration for the SQL connector.
docstr_tok: ["Initialize","the","SQL","connector","with","the","given","configuration",".","Args",":","config","(","ConnectorConfig",")",":","The","configuration","for","the","SQL","connector","."]
code: def __init__(
      self,
      config: Union[BaseConnectorConfig, dict],
      cache_interval: int = 600,
  ):
      """
      Initialize the SQL connector with the given configuration.
  
      Args:
          config (ConnectorConfig): The configuration for the SQL connector.
      """
      config = self._load_connector_config(config)
      super().__init__(config)
  
      if config.dialect is None:
          raise Exception("SQL dialect must be specified")
  
      self._init_connection(config)
  
      self._cache_interval = cache_interval
  
imports: import re
  import os
  import pandas
  from pandasai.exceptions import MaliciousQueryError
  from .base import BaseConnector, SQLConnectorConfig, SqliteConnectorConfig
  from .base import BaseConnectorConfig
  from sqlalchemy import create_engine, text, select, asc
  from sqlalchemy.engine import Connection
  from functools import cached_property, cache
  import hashlib
  from ..helpers.path import find_project_root
  from ..constants import DEFAULT_FILE_PERMISSIONS
  from typing import Union
  import time
label_desc: Use image node_id 1 to create a new SQLConnector object from inherited base classes: BaseConnector with example: obj = SQLConnector(config, cache_interval)