class_docstr: Hook for Google Cloud Spanner APIs.
  
  All the methods in the hook where project_id is used must be called with
  keyword arguments rather than positional.
class_docstr_tok: ["Hook","for","Google","Cloud","Spanner","APIs",".","All","the","methods","in","the","hook","where","project_id","is","used","must","be","called","with","keyword","arguments","rather","than","positional","."]
code: def __init__(
      self,
      gcp_conn_id: str = "google_cloud_default",
      impersonation_chain: str | Sequence[str] | None = None,
      **kwargs,
  ) -> None:
      if kwargs.get("delegate_to") is not None:
          raise RuntimeError(
              "The `delegate_to` parameter has been deprecated before and finally removed in this version"
              " of Google Provider. You MUST convert it to `impersonate_chain`"
          )
      super().__init__(
          gcp_conn_id=gcp_conn_id,
          impersonation_chain=impersonation_chain,
      )
      self._client: Client | None = None
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Callable, NamedTuple, Sequence
  from google.api_core.exceptions import AlreadyExists, GoogleAPICallError
  from google.cloud.spanner_v1.client import Client
  from sqlalchemy import create_engine
  from airflow.exceptions import AirflowException
  from airflow.providers.common.sql.hooks.sql import DbApiHook
  from airflow.providers.google.common.consts import CLIENT_INFO
  from airflow.providers.google.common.hooks.base_google import GoogleBaseHook, get_field
label_desc: Use image node_id 1 to create a new SpannerHook object from inherited base classes: GoogleBaseHook, DbApiHook with example: obj = SpannerHook(gcp_conn_id, impersonation_chain)