docs: async def execute(self, sql, *params):
          """Executes the given operation substituting any markers with
          the given parameters.
  
          :param sql: the SQL statement to execute with optional ? parameter
              markers. Note that pyodbc never modifies the SQL statement.
          :param params: optional parameters for the markers in the SQL. They
              can be passed in a single sequence as defined by the DB API.
              For convenience, however, they can also be passed individually
          """
          if self._echo:
              logger.info(sql)
              logger.info("%r", sql)
          await self._run_operation(self._impl.execute, sql, *params)
          return self