code: def do_executemany(self, cursor, statement, parameters, context=None):
      if self.executemany_mode is EXECUTEMANY_VALUES_PLUS_BATCH:
          if self.executemany_batch_page_size:
              kwargs = {"page_size": self.executemany_batch_page_size}
          else:
              kwargs = {}
          self._psycopg2_extras.execute_batch(
              cursor, statement, parameters, **kwargs
          )
      else:
          cursor.executemany(statement, parameters)
  
imports: from __future__ import annotations
  import collections.abc
  import logging
  import re
  from typing import cast
  from .None import ranges
  from ._psycopg_common import _PGDialect_common_psycopg
  from ._psycopg_common import _PGExecutionContext_common_psycopg
  from .base import PGIdentifierPreparer
  from .json import JSON
  from .json import JSONB
  from ...None import types
  from ...None import util
  from ...util import FastIntFlag
  from ...util import parse_user_argument_for_enum
label_desc: Use image node_id 13 for calling the PGDialect_psycopg2 obj's underlying member method code with example usage: obj.do_executemany(cursor, statement, parameters, context) without return types