class_docstr: This is a base class for generic SQL Operator to get a DB Hook.
  
  The provided method is .get_db_hook(). The default behavior will try to
  retrieve the DB hook based on connection type.
  You can customize the behavior by overriding the .get_db_hook() method.
  
  :param conn_id: reference to a specific database
class_docstr_tok: ["This","is","a","base","class","for","generic","SQL","Operator","to","get","a","DB","Hook",".","The","provided","method","is",".get_db_hook","(",")",".","The","default","behavior","will","try","to","retrieve","the","DB","hook","based","on","connection","type",".","You","can","customize","the","behavior","by","overriding","the",".get_db_hook","(",")","method",".",":","param","conn_id",":","reference","to","a","specific","database"]
code: def __init__(
      self,
      *,
      conn_id: str | None = None,
      database: str | None = None,
      hook_params: dict | None = None,
      retry_on_failure: bool = True,
      **kwargs,
  ):
      super().__init__(**kwargs)
      self.conn_id = conn_id
      self.database = database
      self.hook_params = {} if hook_params is None else hook_params
      self.retry_on_failure = retry_on_failure
  
imports: from __future__ import annotations
  import ast
  import re
  from functools import cached_property
  from typing import TYPE_CHECKING, Any, Callable, Iterable, Mapping, NoReturn, Sequence, SupportsAbs
  from airflow.exceptions import AirflowException, AirflowFailException
  from airflow.hooks.base import BaseHook
  from airflow.models import BaseOperator, SkipMixin
  from airflow.providers.common.sql.hooks.sql import DbApiHook, fetch_all_handler, return_single_query_results
  from airflow.utils.helpers import merge_dicts
label_desc: Use image node_id 1 to create a new BaseSQLOperator object from inherited base classes: BaseOperator with example: obj = BaseSQLOperator()