def set_isolation_level(self, connection, level):
level = level.replace('_', ' ')
+
+ # adjust for ConnectionFairy being present
+ if hasattr(connection, 'connection'):
+ connection = connection.connection
+
+ self._set_isolation_level(connection, level)
+
+ def _set_isolation_level(self, connection, level):
if level not in self._isolation_lookup:
raise exc.ArgumentError(
"Invalid value '%s' for isolation_level. "
def _compat_fetchone(self, rp, charset=None):
return rp.fetchone()
+ _isolation_lookup = set(['SERIALIZABLE', 'READ UNCOMMITTED',
+ 'READ COMMITTED', 'REPEATABLE READ',
+ 'AUTOCOMMIT'])
+
+ def _set_isolation_level(self, connection, level):
+ if level == 'AUTOCOMMIT':
+ connection.autocommit = True
+ else:
+ connection.autocommit = False
+ super(MySQLDialect_mysqlconnector, self)._set_isolation_level(
+ connection, level)
+
+
dialect = MySQLDialect_mysqlconnector
else:
return cset_name()
+ _isolation_lookup = set(['SERIALIZABLE', 'READ UNCOMMITTED',
+ 'READ COMMITTED', 'REPEATABLE READ',
+ 'AUTOCOMMIT'])
+
+ def _set_isolation_level(self, connection, level):
+ if level == 'AUTOCOMMIT':
+ connection.autocommit(True)
+ else:
+ connection.autocommit(False)
+ super(MySQLDialect_mysqldb, self)._set_isolation_level(connection,
+ level)
+
dialect = MySQLDialect_mysqldb
def test_sysdate(self):
d = testing.db.scalar(func.sysdate())
assert isinstance(d, datetime.datetime)
+
+ @testing.only_on(['mysql+mysqldb',
+ 'mysql+mysqlconnector',
+ 'mysql+pymysql',
+ 'mysql+cymysql'])
+ def test_autocommit_isolation_level(self):
+ c = testing.db.connect().execution_options(
+ isolation_level='AUTOCOMMIT'
+ )
+ assert c.execute('SELECT @@autocommit;').scalar()
+
+ def test_isolation_level(self):
+ values = {
+ # sqlalchemy -> mysql
+ 'READ UNCOMMITTED': 'READ-UNCOMMITTED',
+ 'READ COMMITTED': 'READ-COMMITTED',
+ 'REPEATABLE READ': 'REPEATABLE-READ',
+ 'SERIALIZABLE': 'SERIALIZABLE'
+ }
+ for sa_value, mysql_value in values.items():
+ c = testing.db.connect().execution_options(
+ isolation_level=sa_value
+ )
+ assert c.execute('SELECT @@tx_isolation;').scalar() == mysql_value