code: def run(self, statement, parameters=None, **kwparameters):
          
          self._assert_open()
          return self.session.run(statement, parameters, **kwparameters)
docs: Run a Cypher statement within the context of this transaction.
  
          The statement is sent to the server lazily, when its result is
          consumed. To force the statement to be sent to the server, use
          the :meth:`.Transaction.sync` method.
  
          Cypher is typically expressed as a statement template plus a
          set of named parameters. In Python, parameters may be expressed
          through a dictionary of parameters, through individual parameter
          arguments, or as a mixture of both. For example, the `run`
          statements below are all equivalent::
  
              >>> statement = "CREATE (a:Person {name:{name}, age:{age}})"
              >>> tx.run(statement, {"name": "Alice", "age": 33})
              >>> tx.run(statement, {"name": "Alice"}, age=33)
              >>> tx.run(statement, name="Alice", age=33)
  
          Parameter values can be of any type supported by the Neo4j type
          system. In Python, this includes :class:`bool`, :class:`int`,
          :class:`str`, :class:`list` and :class:`dict`. Note however that
          :class:`list` properties must be homogenous.
  
          :param statement: template Cypher statement
          :param parameters: dictionary of parameters
          :param kwparameters: additional keyword parameters
          :returns: :class:`.StatementResult` object
          :raise TransactionError: if the transaction is closed