class_docstr: Hubspot Contacts table.
code: def update_contacts(
      self, contact_ids: List[Text], values_to_update: Dict[Text, Any]
  ) -> None:
      hubspot = self.handler.connect()
      contacts_to_update = [
          HubSpotObjectBatchInput(
              id=contact_id, properties=values_to_update
          )
          for contact_id in contact_ids
      ]
      try:
          updated_contacts = hubspot.crm.contacts.batch_api.update(
              HubSpotBatchObjectBatchInput(inputs=contacts_to_update),
          )
          logger.info(
              f"Contacts with ID {[updated_contact.id for updated_contact in updated_contacts.results]} updated"
          )
      except Exception as e:
          raise Exception(f"Contacts update failed {e}")
  
imports: import pandas
  from hubspot.crm.objects import SimplePublicObjectId, SimplePublicObjectBatchInput, SimplePublicObjectInputForCreate, BatchInputSimplePublicObjectId, BatchInputSimplePublicObjectBatchInput, BatchInputSimplePublicObjectInputForCreate
  from mindsdb_sql.parser import ast
  from mindsdb.integrations.handlers.utilities.query_utilities import INSERTQueryParser, SELECTQueryParser, UPDATEQueryParser, DELETEQueryParser, SELECTQueryExecutor, UPDATEQueryExecutor, DELETEQueryExecutor
  from mindsdb.integrations.libs.api_handler import APITable
  from mindsdb.utilities import log
label_desc: Use image node_id 8 for calling the ContactsTable obj's underlying member method code with example usage: obj.update_contacts(contact_ids, values_to_update) without return types