diff -r 3de9ffcdeb72 lib/sqlalchemy/orm/mapper.py
--- a/lib/sqlalchemy/orm/mapper.py	Thu May 27 14:46:44 2010 -0400
+++ b/lib/sqlalchemy/orm/mapper.py	Fri May 28 17:41:52 2010 -0400
@@ -1521,7 +1521,8 @@
 
                 rows = 0
                 for state, state_dict, params, mapper, connection, value_params in update:
-                    if not value_params and compiled_cache is not None:
+                    if not value_params and compiled_cache is not None and \
+                                'compiled_cache' not in connection._execution_options:
                         c = connection.\
                                 execution_options(
                                         compiled_cache=compiled_cache).\
@@ -1556,7 +1557,8 @@
                     compiled_cache = None
                     
                 for state, state_dict, params, mapper, connection, value_params in insert:
-                    if not value_params and compiled_cache is not None:
+                    if not value_params and compiled_cache is not None and \
+                            'compiled_cache' not in connection._execution_options:
                         c = connection.\
                                 execution_options(
                                         compiled_cache=compiled_cache).\
diff -r 3de9ffcdeb72 lib/sqlalchemy/orm/session.py
--- a/lib/sqlalchemy/orm/session.py	Thu May 27 14:46:44 2010 -0400
+++ b/lib/sqlalchemy/orm/session.py	Fri May 28 17:41:52 2010 -0400
@@ -317,7 +317,9 @@
                         "given Connection's Engine")
             else:
                 conn = bind.contextual_connect()
-
+                if self.session._execution_options:
+                    conn = conn.execution_options(**self.session._execution_options)
+                    
         if self.session.twophase and self._parent is None:
             transaction = conn.begin_twophase()
         elif self.nested:
@@ -552,6 +554,7 @@
         self.extensions = util.to_list(extension) or []
         self._query_cls = query_cls
         self._mapper_flush_opts = {}
+        self._execution_options = util.frozendict()
 
         if binds is not None:
             for mapperortable, bind in binds.iteritems():
@@ -564,6 +567,10 @@
             self.begin()
         _sessions[self.hash_key] = self
 
+    def execution_options(self, **kw):
+        """update the execution options of this Session with the given options."""
+        self._execution_options = self._execution_options.union(kw)
+        
     def begin(self, subtransactions=False, nested=False):
         """Begin a transaction on this Session.
 
@@ -700,8 +707,11 @@
         if self.transaction is not None:
             return self.transaction._connection_for_bind(engine)
         else:
-            return engine.contextual_connect(**kwargs)
-
+            conn = engine.contextual_connect(**kwargs)
+            if self._execution_options:
+                conn = conn.execution_options(**self._execution_options)
+            return conn
+            
     def execute(self, clause, params=None, mapper=None, **kw):
         """Execute a clause within the current transaction.
 
