'Set non-SQL options for the statement which take effect during
execution.
Execution options can be set on a per-statement or
per :class:`.Connection` basis.   Additionally, the
:class:`.Engine` and ORM :class:`~.orm.query.Query` objects provide
access to execution options which they in turn configure upon
connections.
The :meth:`execution_options` method is generative.  A new
instance of this statement is returned that contains the options::
statement = select([table.c.x, table.c.y])
statement = statement.execution_options(autocommit=True)
Note that only a subset of possible execution options can be applied
to a statement - these include "autocommit" and "stream_results",
but not "isolation_level" or "compiled_cache".
See :meth:`.Connection.execution_options` for a full list of
possible options.
.. seealso::
:meth:`.Connection.execution_options()`
:meth:`.Query.execution_options()`'

@_generative
def execution_options(self, **kw):

    if ('isolation_level' in kw):
        raise exc.ArgumentError("'isolation_level'    execution    option    may    only    be    specified    on    Connection.execution_options(),    or    per-engine    using    the    isolation_level    argument    to    create_engine().")
    if ('compiled_cache' in kw):
        raise exc.ArgumentError("'compiled_cache'    execution    option    may    only    be    specified    on    Connection.execution_options(),    not    per    statement.")
    self._execution_options = self._execution_options.union(kw)
